2017-02-24 20 views
-1

"022417"のような値を持つデータベーステーブル列があり、そのすべてを "02-24-2017"に変更するクエリを作成したい場合、そのクエリの外観好き? (?)SQL文字列形式を更新

私の最初の試みは、ワイルドカードを使用しようとした構文:

UPDATE b5_adproduct 
SET ad_date = replace(ad_date, '______', '__-__-20__'); 

が、それは失敗しました。

+1

日付のデータを変更する場合は、実際のDATEデータ型に変更しないでください。 – Siyual

+1

だから、もしあなたが "022487"を持っていたら、これから何年になるのですか? 1987年、2087 ... – RIKI

+0

実際にDjango CharFieldをDateFieldに移行しましたが、まずdb内の既存の値をすべて受け入れ可能な形式に変更する必要があります。 – kjarsenal

答えて

3

あなたが、これはそれらのすべてのために働く必要がありますので、あなたの記録が唯一、昨年からまたがることをコメントで述べた:

UPDATE `b5_adproduct` SET `ad_date` = CONCAT(SUBSTRING(`ad_date`, 1, 2), '-', SUBSTRING(`ad_date`, 3, 2), '-20', SUBSTRING(`ad_date`, 5, 2)) 

また、フィールドは、念のために、以上の6つの文字を受け入れ、その前に確認してください文字列が長くなるため

また、フィールドを日付フィールドに切り替える予定の場合、日付はYYYY-MM-DDのようになりますので、次のように使用してください:

UPDATE `b5_adproduct` SET `ad_date` = CONCAT('20', SUBSTRING(`ad_date`, 5, 2), '-', SUBSTRING(`ad_date`, 1, 2), '-', SUBSTRING(`ad_date`, 3, 2)) 
+0

私は、そのテーブルのすべての 'ad_date'値に対して機能するものが必要です。だからワイルドカード戦略が私の最初の考えでした。 – kjarsenal

+0

私はちょうどそれをテストし、それは動作するはずです。あなたは2000年より前の年月の日付がありますか? – eeetee

+0

このソリューションは、日付が1999年の偉大な年のような別の世紀のものでない限り有効です... –

1

format()substr()を使用できます。

update b5_adproduct 
set ad_date = format(
    '%s-%s-20%s', 
    substr(ad_date, 1, 2), 
    substr(ad_date, 3, 2), 
    substr(ad_date, 5, 2)) 
returning * 

id | ad_date 
----+------------ 
    1 | 02-24-2017 
(1 row) 

値を同時に変換する列の種類を変更することもできます。

alter table b5_adproduct 
    alter ad_date type date 
    using make_date(
     substr(ad_date, 5, 2)::int+ 2000, 
     substr(ad_date, 1, 2)::int, 
     substr(ad_date, 3, 2)::int) 
-- make_date(yyyy, mm, dd) 
1

もう1つの方法は、日付形式に変換することです。 MySQLを使用する場合には、次のようになります。

STR_TO_DATE()はこれまでに、あなたの文字列を変換し、表示する日付の書式を指定する DATE_FORMAT()を使用
UPDATE `b5_adproduct` 
SET `ad_date` = DATE_FORMAT(STR_TO_DATE(`ad_date`, '%m%d%y'), '%m-%d-%Y'); 

あなたがこれまでにあなたの文字列を変換するためにto_date()を使用することができますPostgreSQLのを使用している場合:

to_date('022417', 'MMDDYY') 

仕様:https://www.postgresql.org/docs/9.2/static/functions-formatting.html

0

は、この(上記の答えとは少し違うような何かを行うことができます - ちょうど宣言された変数を独自のテーブル値に置き換えます)

Declare @date nvarchar(10) 
Set @date = '122417' 

**select @date, substring(@date,1,2) + '-' + substring(@date,3,2) + '-20' + substring(@date,5,2)** 

go 

返品:

122417 12-24-2017 
+0

を選択して、選択された日付を部分文字列...に置き換え、構文を更新文に変換するだけです –