0

14-Sep-2012 15:47:27フォーマットされているテーブル列を更新したいという値を持つパラメーターがあり2012-08-10 05:00:00.000ます。

必要なクエリは何でしょうか'

@UpdateTime = '14-Sep-2012 15:47:27'

Update tbl 
Set Datetimecol = CONVERT(datetime,@UpdateTime,110) ??

SQL Server 2008を使用しています。ありがとうございます!

4

2 に答える 2

3

編集された質問については、仕様を削除するだけで済みます110。表示した形式の仕様は実際にはありませんが、SQLServerを英語でインストールすると変換されます。

例えば

declare @UpdateTime datetime = '14-Sep-2012 15:47:27'
select CONVERT(datetime,@UpdateTime)

-- result
September, 14 2012 15:47:27

月の部分が少なくとも3文字の長さであると仮定すると、たとえば、Mar、Marc、March、Septの場合、次のコマンドを使用して、その非常に悪いテキストの日時を通常の3文字の月の形式に変換できます。

declare @updatetime nvarchar(20) = '18-Sept-2012'
declare @fixedtime nvarchar(20)
set @fixedtime = stuff(@updatetime,1,charindex('-',@updatetime),'')
set @fixedtime = Left(@updatetime,charindex('-',@updatetime))
               + stuff(@fixedtime,4,len(@fixedtime)-8,'')

-- @fixedtime contains `18-Sep-2012`

Update tbl 
Set Datetimecol = @fixedtime

はい、更新ステートメントで意図的にCAST/CONVERTを省略しました。

于 2012-09-27T21:48:25.807 に答える
2

言語設定が常に英語であり、地域設定が変更されない限り、別のアプローチがあります(さまざまな潜在的な形式のサンプルデータとともに)。

DECLARE @x TABLE(y NVARCHAR(15));

INSERT @x VALUES('18-Sept-2012'),('9-May-2012'),('19-Oct-2012'),('04-March-2012');

SELECT z, CONVERT(DATETIME,z) FROM
(
  SELECT SUBSTRING(y,s+1,3) + ' ' + LEFT(y,s-1) + ', ' + RIGHT(y,4) FROM
  (
    SELECT y, CHARINDEX('-',y) FROM @x
  ) AS y(y,s)
) AS z(z);

結果:

Sep 18, 2012   2012-09-18 00:00:00.000
May 9, 2012    2012-05-09 00:00:00.000
Oct 19, 2012   2012-10-19 00:00:00.000
Mar 04, 2012   2012-03-04 00:00:00.000

変数にも同じ計算を使用できます。

DECLARE 
  @y NVARCHAR(15) = N'18-Sept-2012',
  @z DATETIME;

SELECT @z = CONVERT(DATETIME,z) FROM
(
  SELECT SUBSTRING(y,s+1,3) + ' ' + LEFT(y,s-1) + ', ' + RIGHT(y,4) FROM
  (
    SELECT @y, CHARINDEX('-',@y)
  ) AS y(y,s)
) AS z(z);

SELECT @z;
-- UPDATE ...

(今度は試してみてSET LANGUAGE FRENCH;、すべてがどこかに行くのを見てください。)

このため、nvarcharタイプを使用した日付の保存/受け渡しを停止することを強くお勧めします。理由により、日付/時刻タイプを強く入力しました。文字列リテラルを渡す必要がある場合は、言語、地域、および日付形式の設定に違いが生じにくい、明確で標準的な形式を使用する必要があります。この場合、正しい形式は次のようになりますYYYYMMDD

20120918

詳細については、以下を参照してください。

于 2012-09-27T23:38:38.827 に答える