入力:ジェネリック機能
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
お勧めします。あなたが特定のフォーマットにあなたの日付を取得することができ、以下の機能を使用して
入力:ジェネリック機能
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
お勧めします。あなたが特定のフォーマットにあなたの日付を取得することができ、以下の機能を使用して
:
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さまざまな日付形式が含まれています。
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
私の提案です:チュートリアルを読んで、何かを試してみてください。 – Julien