0

これに何時間も苦労しています。

次のような一連のデータがあります。

テーブル名:TEST_1

log_date両方ともlog_time現在varchar(200)

現在のフォーマットの例:

  • log_date = 20131004
  • log_time = 113052:123

log_dateandをより良い形式に変換したいlog_time(特に時刻)

これが私のコードです

INSERT INTO TEST_2(log_date, log_time, process, log_type, detail_msg, decision_msg)
   SELECT  
      CONVERT(date, log_date, 111), CONVERT(time, log_time, 114), 
      process, log_type, detail_msg, decision_msg
   FROM TEST_1 

現在、log_date変換は正常に機能しているようですが、変換しようとするとこのエラーが発生しますlog_time

メッセージ 241、レベル 16、状態 1、行 3
文字列から日付や時刻を変換するときに、変換に失敗しました。

データ型をに変更しようとしましvarcharたが、エラーは発生しませんが、何も変換されません。

助けてください!

ありがとう

4

2 に答える 2

1

方法...それは文字列操作になります。もっと多くの値を見たいです。

SELECT
  CONVERT(date, log_date, 111) AS log_date
, cast(
       left(log_time,2)
       + ':' + substring(log_time,3,2)
       + ':' + substring(log_time,5,2)
       + right(log_time,4)
       AS time)                AS log_time
FROM test_1


CREATE TABLE Test_1
    ([Log_date] varchar(200), [Log_time] varchar(200))
;

INSERT INTO Test_1
    ([Log_date], [Log_time])
VALUES
    ('20131004', '113052:123')
;

|   LOG_DATE |         LOG_TIME |
|------------|------------------|
| 2013-10-04 | 11:30:52.1230000 |



  [1]: http://sqlfiddle.com/#!3/1dff0/6
于 2013-10-09T11:47:22.693 に答える
0

は変換に有効な値20131004と見なされますが、そうではありません。varchardatetime113052:123

114 を指定するので、その形式は のようになります11:30:52:123

これを試してください:

   CONVERT(
     time,
     substring(log_time,1,2)+':'+
     substring(log_time,3,2)+':'+
     substring(log_time,5,2)+
     substring(log_time,7,4), 
     114)
于 2013-10-09T11:38:20.897 に答える