6

私のテーブルで

LoginDate  
2013-08-29 13:55:48  

loginDate列のデータ型はnvarchar(150)

logindateSQLコマンドを使用して列を日時形式 に変換したい

期待される結果。

LoginDate  
29-08-2013 13:55:48
4

6 に答える 6

7
DECLARE @chr nvarchar(50) = (SELECT CONVERT(nvarchar(50), GETDATE(), 103))

SELECT @chr chars, CONVERT(date, @chr, 103) date_again
于 2016-01-05T12:50:08.150 に答える
3

データは 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 | 
于 2013-10-07T10:42:16.367 に答える
1
SELECT CONVERT(NVARCHAR, LoginDate, 105)+' '+CONVERT(NVARCHAR, LoginDate, 108) AS LoginDate FROM YourTable

Output
-------------------
29-08-2013 13:55:48
于 2013-10-07T08:29:08.643 に答える
1
alter table your_table
alter column LoginDate datetime;

SQLFiddle デモ

于 2013-10-07T07:19:44.987 に答える
0

あなたが正確にやりたくないことは何ですか?列のデータ型を変更するには、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 データ型を使用してください。

ありがとうございました

于 2013-10-07T07:37:49.597 に答える