私のテーブルで
LoginDate
2013-08-29 13:55:48
loginDate
列のデータ型はnvarchar(150)
logindate
SQLコマンドを使用して列を日時形式 に変換したい
期待される結果。
LoginDate
29-08-2013 13:55:48
私のテーブルで
LoginDate
2013-08-29 13:55:48
loginDate
列のデータ型はnvarchar(150)
logindate
SQLコマンドを使用して列を日時形式 に変換したい
期待される結果。
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
データは 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 |
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;
あなたが正確にやりたくないことは何ですか?列のデータ型を変更するには、alter コマンドを次のように簡単に使用できます。
ALTER TABLE table_name ALTER COLUMN LoginDate DateTime;
ただし、この列にのみ有効な日付があるはずですが、データ型は nvarchar であることを忘れないでください。
データのフェッチ中にデータ型を変換したくない場合は、CONVERT 関数を次のように使用できます。
CONVERT(データ型(長さ),式,スタイル)
例えば:
SELECT CONVERT(日時、ログイン日、6)
これは 29 AUG 13 を返します。CONVERT 関数の詳細については、
http://www.w3schools.com/sql/func_convert.asp。
DateTime 列には常に DataTime データ型を使用してください。
ありがとうございました