0

列の日付形式を変更しようとしていますが、列はvarchar列名datetimeとして設定されています。問題は、自動化側のPLCによってデータが自動的に入力されるため、実際にデータタイプを変更できないことです。クエリを実行するときにシステムに日付範囲を指定する必要があるため、日付または数値の日付が必要です。この問題を回避するためにサブストリングを使用しようとしていますが、データ型が範囲外であるというエラーが発生します。これが私のクエリの構文です。

select cast(
     (substring(datetime, 1, 4) + '-' +
      SUBSTRING(DateTime, 5, 2) + '-' + 
      SUBSTRING(DateTime, 7, 2) + ' ' + '00:00:00.000') as dateTime) as "Date"
    , ID1
    , ID2
    ,  diameter
    , WeightTheoretical
    , WeightActual
    , StockType 
from table1 
where datetime is not null 
    and datetime <> '' 
    and datetime <> '0' 
order by "Date", ID1;

編集-日付形式はそれ自体です20120622:00:00:00:000

4

3 に答える 3

3

日付が format であると仮定すると、yyyymmdd次のように varchar を datetime に変換できます。

select convert(datetime, columname, 112)
于 2012-06-22T16:14:31.833 に答える
2

SQL から、日付文字列の形式がYYYYMMDD

これは、CASTまたはCONVERT関数のいずれかを使用して正常に変換されます。

例えば

SELECT CONVERT(datetime,'20120601')
SELECT CAST('20120601' as datetime)

どちらも期待値を日時として返します。

編集:指定した提供された形式に基づいて、を使用しSubStringて、提供されたデータを少し切り詰めます。

例えば

SELECT CONVERT(datetime,SUBSTRING('20120601',1,8))    
于 2012-06-22T16:15:15.143 に答える
0

表 ( ) 内のデータの形式に基づいて20120622:00:00:00:000、次の操作を実行できます。

declare @date varchar(50)
set @date = '20120622:00:00:00:000'

select cast(left(@date, 8) as datetime)

また

select convert(datetime, left(@date, 8))

結果:

2012-06-22 00:00:00.000
于 2012-06-22T16:19:19.900 に答える