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」である必要があります。等々。

関数を実行して、を呼び出して (INSERT 句で) canceldate の値を割り当てることを考えていました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 に答える