如果我有一个数据库表列,其值看起来像“022417”,并且我想要构建一个查询,将它们全部更改为“02-24-2017”,那么查询会是什么样子喜欢?更新SQL字符串格式
我的初步尝试尝试使用通配符语法(?):
UPDATE b5_adproduct
SET ad_date = replace(ad_date, '______', '__-__-20__');
但没有成功。
如果我有一个数据库表列,其值看起来像“022417”,并且我想要构建一个查询,将它们全部更改为“02-24-2017”,那么查询会是什么样子喜欢?更新SQL字符串格式
我的初步尝试尝试使用通配符语法(?):
UPDATE b5_adproduct
SET ad_date = replace(ad_date, '______', '__-__-20__');
但没有成功。
您的评论说,你的记录只是从去年跨越所以这应该为所有这些工作:
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))
您可以使用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)
另一种方法是简单地将其转换为日期格式。如果你使用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
可以做这样的事情(有点不同于上面的答案 - 只要用您自己的表值替换已声明的变量)
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
,并将select切换到set date = substring ...以及更新语句的语法 –
如果您正在尝试更改日期的数据,为什么不将它们更改为实际的'DATE'数据类型? – Siyual
那么,如果你有“022487”那么这一年是什么年份? 1987,2087 ... – RIKI
实际上将Django CharField迁移到DateField,但我必须先将db中的所有现有值更改为可接受的格式。 – kjarsenal