0

が保存されているvarchar列があり、日付時刻に変換できる通常の形式の日付時刻と、変換できない次の形式の日付時刻があります。どうすればこの問題を解決できますか? 変換しようとしましたが、それらの値に対してエラーが発生します。datetime00:00:00.000000:00:00.00

select (DATEPART(HOUR, (SELECT CONVERT(datetime,time,121) FROM table ) ) * 3600) + (DATEPART(MINUTE, (SELECT CONVERT(datetime,time,121) FROM テーブル) ) * 60) + (DATEPART( SECOND, (SELECT CONVERT(datetime,time,121) FROM テーブル ) ) ))

4

1 に答える 1

0

提供された情報と次の仮定に基づく0000:00:00.00=HHHH:MM:SS:NN

DECLARE @t table (
   blah varchar(20)
);

INSERT INTO @t (blah)
  VALUES ('0:00:00.00')
       , ('0000:00:00.00')
       , ('0000:01:37.61');


SELECT blah
     , hours
     , minutes
     , seconds
     , milliseconds
     , DateAdd(ms, milliseconds, DateAdd(ss, seconds, DateAdd(mi, minutes, DateAdd(hh, hours, 0))))
FROM   (
        SELECT blah
             , Cast(left_part As int) As hours
             , Cast(SubString(right_part, 1, 2) As int) As minutes
             , Cast(SubString(right_part, 4, 2) As int) As seconds
             , Cast(Left(SubString(right_part, 7, 3) + '000', 3) As int) As milliseconds -- padded to 3 characters (trailing zeroes)
        FROM   (
                SELECT blah
                     , SubString(blah, 0, CharIndex(':', blah)) As left_part
                     , SubString(blah, CharIndex(':', blah) + 1, 20) As right_part -- FYI 20 = length of varchar field
                FROM   (
                        SELECT blah
                             , CharIndex(':', blah) + 1 As colon
                        FROM   @t
                       ) As find_the_first_colon
               ) As split_the_string_by_first_colon
       ) As work_out_component_parts;
于 2013-08-05T10:31:27.713 に答える