更新SQL字符串格式

时间:2017-02-24 19:55:07

标签: sql postgresql

如果我有一个数据库表列,其值看起来像" 022417"并且我想构建一个查询,将所有这些更改为" 02-24-2017",该查询会是什么样的?

我最初的尝试尝试使用通配符(?)语法:

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

但这不成功。

4 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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)

答案 2 :(得分:1)

另一种方法是简单地将其转换为日期格式。如果您使用MySQL,那将是:

x[1]

UPDATE `b5_adproduct` SET `ad_date` = DATE_FORMAT(STR_TO_DATE(`ad_date`, '%m%d%y'), '%m-%d-%Y'); 将您的字符串转换为日期,然后使用STR_TO_DATE()指定要显示的日期格式。

如果您使用的是PostgreSQL,可以使用DATE_FORMAT()将字符串转换为日期:

to_date()

规格:https://www.postgresql.org/docs/9.2/static/functions-formatting.html

答案 3 :(得分: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