2017-02-24 44 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

另一種方法是簡單地將其轉換爲日期格式。如果你使用MySQL這將是:

UPDATE `b5_adproduct` 
SET `ad_date` = DATE_FORMAT(STR_TO_DATE(`ad_date`, '%m%d%y'), '%m-%d-%Y'); 

哪裏STR_TO_DATE()您的字符串轉換爲日期,然後用DATE_FORMAT()以當日指定格式顯示。

如果你使用PostgreSQL,你可以使用to_date()將字符串轉換爲日期:

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

,並將select切換到set date = substring ...以及更新語句的語法 –