0

我有这些信息:

Column workflowname has this value ='12STD_Orientations_Workflow'
Column canceldate has a date value

我需要为列活动名称分配一个值,如下所示:

假设 canceldate 中的值是 2012 年 11 月,该值必须是 '12STD_Orientations_2012_Nov'。如果该值为 2013 年 1 月,则该值必须为“12STD_Orientations_2013_Jan”。等等。

我正在考虑做一个函数并通过调用来分配 canceldate 的值(在 INSERT 子句中)MyFunction(workflowname,canceldate)。但我不知道如何在函数内部编写代码!

4

2 回答 2

1

这是一个可以产生您想要的结果的版本。此版本反转值的当前值,然后在字符串中@str查找第一个:_

declare @str varchar(100) = '12STD_Orientations_Workflow'
declare @dt datetime = '2012-01-01'


select left(@str, len(@str) - charindex('_', REVERSE(@str))) 
    + '_'
    + cast(YEAR(@dt) as char(4))
    + '_'
    + CONVERT(char(3), @dt, 109)

请参阅带有演示的 SQL Fiddle

然后如果你想把它放在一个函数中,你可以使用:

create function dbo.New_Workflow
(
  @origName varchar(200), 
  @dt datetime
)
RETURNS varchar(200) 
AS 
BEGIN
    declare @newvalue varchar(100)
    select @newvalue = left(@origName, len(@origName) - charindex('_', REVERSE(@origName))) 
            + '_'
            + cast(YEAR(@dt) as char(4))
            + '_'
            + CONVERT(char(3), @dt, 109)
    RETURN @newvalue
END;

然后调用它你可以使用:

declare @str varchar(100) = '12STD_Orientations_Workflow'
declare @dt datetime = '2012-11-01'

select dbo.New_Workflow(@str, @dt)

请参阅带有演示的 SQL Fiddle

结果是:

|                    COLUMN_0 |
-------------------------------
| 12STD_Orientations_2012_Nov |

现在,如果您需要从表中提取它,您将使用:

select dbo.New_Workflow(yourWorkFlowNameCol, yourDateColumn)
from yourtable
于 2012-11-27T18:52:18.813 回答
1
CREATE FUNCTION dbo.MyFunction
(
    @originalString VARCHAR(200), 
    @dateFromField DATETIME
)
RETURNS varchar(200) 
AS
BEGIN 
    DECLARE @newString VARCHAR(200)
    SELECT @newString = LEFT(@originalString,19) + LEFT(CONVERT(VARCHAR(19),@dateFromField,109),3)
    RETURN @newString
END;
于 2012-11-27T19:03:55.527 回答