0

職場の誰かからデータベースを継承しましたが、すべての日付が VARCHAR() に格納されています。通常、私はそれを日時に変換して先に進みます。しかし、「2012 年 6 月 19 日火曜日 11:46:40 AM」の形式で保存されています。PHP と SQL でいくつかのスクリプトと日付比較を行っています。これを使用可能な日付にする必要があります。

この方法で変換してみました: 古い日付を取得し、変換時に名前を変更する別のフィールドに変換します。実行すると、エラーが発生します

 UPDATE ticket_backup
    SET new_date = CONVERT(VARCHAR(50), CAST(submit_date AS DATETIME), 109)

datetime を binary/varbinary 文字列から変換するときに変換に失敗しました。

そのため、正規表現を使用して部分文字列を削除し、不要なものを削除する必要があると考えています。SQLサーバーのDATETIME標準の「2013-02-07 11:28:51」の形式にする必要があります

私は障害に直面しており、変換する必要があるレコードがたくさんあるので、どんな助けでも大歓迎です。

4

3 に答える 3

2

完全ではありませんが、これは私がそれにアプローチする方法です:

  1. 新しい日付列を作成する
  2. 日の部分を取り除くために現在のすべての値を更新します...

    update mytable set mydate = replace( mydate, 'Monday, ', '' );

    update mytable set mydate = replace( mydate, '火曜日, ', '' );

  1. その「で」単語を削除します

    update mytable set mydate = replace( mydate, ' at ', '' );

  2. 変換を再試行してください

    UPDATE ticket_backup SET new_date = CONVERT(VARCHAR(50), CAST(submit_date AS DATETIME), 109)

  3. 古い列を削除

  4. 新しい列の名前を変更
于 2013-02-07T16:52:29.550 に答える
1

これができる方法の1つで、私が思うほど簡単です。

SELECT CONVERT(DATETIME,REPLACE(RIGHT(submit_date,LEN(submit_date)-CHARINDEX(',',submit_date)),' at ',' '),109)

SQLフィドル

于 2013-02-07T17:09:37.593 に答える
1

SQLの日付..いつも楽しい!これを試してください。すべての行がデモ行と同じ形式(たとえば、日の後のコンマ)である限り、機能するはずです。

UPDATE ticket_backup
    SET new_date = CAST(REPLACE(SUBSTRING(CAST(submit_date as varchar(50)) ,
            PATINDEX('%,%',CAST(submit_date as varchar(50)) )+2 ,LEN(CAST(submit_date as varchar(50)) )),'at ', '') as datetime)
于 2013-02-07T17:01:22.080 に答える