私のテーブルで
_LoginDate
2013-08-29 13:55:48
_
loginDate
列のデータ型はnvarchar(150)
です
SQLコマンドを使用してlogindate
列を日時形式に変換したい
期待される結果。
_LoginDate
29-08-2013 13:55:48
_
DECLARE @chr nvarchar(50) = (SELECT CONVERT(nvarchar(50), GETDATE(), 103))
SELECT @chr chars, CONVERT(date, @chr, 103) date_again
SELECT CONVERT(NVARCHAR, LoginDate, 105)+' '+CONVERT(NVARCHAR, LoginDate, 108) AS LoginDate FROM YourTable
Output
-------------------
29-08-2013 13:55:48
alter table your_table
alter column LoginDate datetime;
データはnvarcharであるため、datetimeに変換される保証はありません(無効な日付/時刻情報を保持している可能性があるため)-これを処理する方法は、クロス適用内で使用するISDATEを使用することです。 (クロス適用結果は再利用可能であるため、出力形式の作成が容易になります。)
| YOUR_DT | SQL2008 |
|-----------------------------|---------------------|
| 2013-08-29 13:55:48 | 29-08-2013 13:55:48 |
| 2013-08-29 13:55:48 blah | (null) |
| 2013-08-29 13:55:48 rubbish | (null) |
SELECT
[Your_Dt]
, convert(varchar, ca1.dt_converted ,105) + ' ' + convert(varchar, ca1.dt_converted ,8) AS sql2008
FROM your_table
CROSS apply ( SELECT CASE WHEN isdate([Your_Dt]) = 1
THEN convert(datetime,[Your_Dt])
ELSE NULL
END
) AS ca1 (dt_converted)
;
ノート:
また、left([Your_Dt]、19)を導入して、「2013-08-29 13:55:48ゴミ」から「2013-08-29 13:55:48」のような文字列のみを取得することもできます。
その特定の出力については、比較のために2つのSQL 2008日付スタイル(105および8)sql2012を追加する必要があると思います
declare @your_dt as datetime2
set @your_dt = '2013-08-29 13:55:48'
select
FORMAT(@your_dt, 'dd-MM-yyyy H:m:s') as sql2012
, convert(varchar, @your_dt ,105) + ' ' + convert(varchar, @your_dt ,8) as sql2008
| SQL2012 | SQL2008 |
|---------------------|---------------------|
| 29-08-2013 13:55:48 | 29-08-2013 13:55:48 |
これはどうですか
--// Convert NVARCHAR to DATETIME
DECLARE @date DATETIME = (SELECT convert(DATETIME, '2013-08-29 13:55:48', 120))
--// Convert DATETIME to custom NVARCHAR FORMAT
SELECT
RIGHT('00'+ CAST(DAY(@date) AS NVARCHAR),2) + '-' +
RIGHT('00'+ CAST(MONTH(@date) AS NVARCHAR),2) + '-' +
CAST(YEAR(@date) AS NVARCHAR) + ' ' +
CAST(CONVERT(TIME,@date) AS NVARCHAR)
結果:'29 -08-2013 13:55:48.0000000 '
何をしたくないのですか?列のデータ型を変更するには、次のように単純にalterコマンドを使用します。
ALTER TABLE table_name ALTER COLUMN LoginDate DateTime;
ただし、この列にのみ有効な日付があるはずですが、データ型はnvarcharです。
データのフェッチ中にデータ型を変換したくない場合は、CONVERT関数を次のように使用できます。
CONVERT(data_type(length)、expression、style)
例えば:
SELECT CONVERT(DateTime、loginDate、6)
これにより、8月13日29が返されます。アクセスできるCONVERT関数の詳細については、
http://www.w3schools.com/sql/func_convert.asp 。
DateTime列には常にDataTimeデータ型を使用してください。
ありがとうございました