2016-07-16 1 views
0

入力:ジェネリック機能

11-07-2016 14:21:59 
08/07/2016 5:12:52 PM 

出力:

2016-07-11 14:21:59 
2016-07-08 17:12:52 

dd-mm-yyyy hh:mm:ss

入力の形式で私の日付が必要特定の形式で返されるようにyyyy-mm-dd hh:mm:ss

お勧めします。あなたが特定のフォーマットにあなたの日付を取得することができ、以下の機能を使用して

+0

私の提案です:チュートリアルを読んで、何かを試してみてください。 – Julien

答えて

0

CREATE FUNCTION [dbo].[fn_ReturnSpecificDateFormat] 
(@InputDate VARCHAR (100)) 
RETURNS VARCHAR(50) 
AS 
BEGIN 

    DECLARE @RetrunFormat AS VARCHAR (19) = ''; 

    IF CHARINDEX(' ', @InputDate, 1) = 9 
     SET @RetrunFormat = CONVERT(VARCHAR(19), CONVERT(DATETIME, @InputDate, 5), 120) 
    ELSE 
     SET @RetrunFormat = CONVERT(VARCHAR(19), CONVERT(DATETIME, @InputDate, 105), 120) 

    RETURN @RetrunFormat 

END 

与えられたサンプルデータとサンプルの実行:

DECLARE @DateSpecificFormat TABLE (TestDate VARCHAR (100)); 

INSERT INTO @DateSpecificFormat (TestDate) VALUES 
('17/07/16 2:56:20 PM'), 
('11-07-2016 14:21:59'), 
('08/07/2016 5:12:52 PM'), 
('14-07-2016 05:12:52 PM'); 

SELECT TestDate, [dbo].[fn_ReturnSpecificDateFormat] (TestDate) AS SpecificFormat 
FROM @DateSpecificFormat; 

結果:

TestDate     SpecificFormat 
---------------------- -------------------- 
17/07/16 2:56:20 PM  2016-07-17 14:56:20 
11-07-2016 14:21:59  2016-07-11 14:21:59 
08/07/2016 5:12:52 PM 2016-07-08 17:12:52 
14-07-2016 05:12:52 PM 2016-07-14 17:12:52 

This pageさまざまな日付形式が含まれています。

+0

私はyyyy-mm-dd hh:mm:ssを必要とします。yyyy-dd-mm hh:mm:ss – MDev

+0

@MohdFahim:したがって、入力 '11-07-2016 14:21:59'では '11'がその日と「07」は月ですか? – Arulkumar

+0

はい、08/07/2016 5:12:52 PM 08は日、07は月です。 – MDev

0

1)日付/時刻スタイルごとにTRY_CONVERTを指定した簡単なCOALESCE呼び出しで十分です。あなたは、専用のUDFを作成する必要はありません。

SELECT x.VarCharCol, 
    COALESCE(TRY_CONVERT(DATETIME, NULLIF(x.VarCharCol, ''), 103), TRY_CONVERT(DATETIME, NULLIF(x.VarCharCol, ''), 105)) AS DateTimeCol, 
    CONVERT(VARCHAR(100), COALESCE(TRY_CONVERT(DATETIME, NULLIF(x.VarCharCol, ''), 103), TRY_CONVERT(DATETIME, NULLIF(x.VarCharCol, ''), 105)), 120) AS DTAsVarCharWithCustomFormat 
FROM (VALUES 
    ('11-07-2016 14:21:59 '), 
    ('08/07/2016 5:12:52 PM'), 
    (''), 
    (NULL), 
    ('dafdf') 
) x(VarCharCol) 
GO 
/* 
VarCharCol   DateTimeCol    DTAsVarCharWithCustomFormat 
--------------------- ----------------------- --------------------------- 
11-07-2016 14:21:59 2016-07-11 14:21:59.000 2016-07-11 14:21:59 
08/07/2016 5:12:52 PM 2016-07-08 17:12:52.000 2016-07-08 17:12:52 
         NULL     NULL 
NULL     NULL     NULL 
dafdf     NULL     NULL 
*/ 

103 = DD/MM/YYYY 105 = DD-MM-YYYY 120 = YYYY-MM-DD HH:MI:SS(24時間)

2)ただし、UDFを作成する必要がある場合は、インラインUDFを選択します。通常、インラインUDFはスカラー関数と比較して優れたパフォーマンスを持ちます。

CREATE FUNCTION dbo.GetDateTimeValueFromString(@VarCharValue VARCHAR(50)) 
RETURNS TABLE 
AS 
RETURN 
SELECT COALESCE(TRY_CONVERT(DATETIME, NULLIF(@VarCharValue, ''), 103), TRY_CONVERT(DATETIME, NULLIF(@VarCharValue, ''), 105)) AS DateTimeValue 
GO 

SELECT x.VarCharCol, 
    y.DateTimeValue AS DateTimeCol, 
    CONVERT(VARCHAR(100), y.DateTimeValue, 120) AS DTAsVarCharWithCustomFormat 
FROM (VALUES 
    ('11-07-2016 14:21:59 '), 
    ('08/07/2016 5:12:52 PM'), 
    (''), 
    (NULL), 
    ('dafdf') 
) x(VarCharCol) 
OUTER APPLY dbo.GetDateTimeValueFromString(x.VarCharCol) AS y 
GO 

注:スカラーUDFのために私が使用するWITH SCHEMABINDING

関連する問題