嗨,我的“用户”表中有一列名为“ PersonalDetails_DOB”。
数据类型为NVARCHAR(10),数据的“格式”当前为DD / MM / YYYY。
我想将格式更改为YYYY.MM.DD或YYYY-MM-DD,我该怎么做?
我已经尝试过在SQL中运行查询:
SELECT CONVERT(nvarchar(10), PersonalDetails_DOB, 102) as
'PersonalDetails_DOB' FROM Users;
什么也没有发生,并且它不会更改任何日期,例如1967年6月2日至1967.02.06
答案 0 :(得分:1)
将日期存储为日期,而不是字符串。我建议您将值作为日期而不是字符串:
SELECT CONVERT(date, PersonalDetails_DOB, 103) as PersonalDetails_DOB
FROM Users;
使用try_convert()
会更安全:
SELECT TRY_CONVERT(date, PersonalDetails_DOB, 103) as PersonalDetails_DOB
FROM Users;
要查找不良值,您可以执行以下操作:
select PersonalDetails_DOB
from users
where TRY_CONVERT(date, PersonalDetails_DOB, 103) is null;
如果需要,可以转换回字符串。
我建议您修复数据结构。这应该起作用:
update users
set PersonalDetails_DOB = CONVERT(date, PersonalDetails_DOB, 103);
alter users alter column PersonalDetails_DOB date;
答案 1 :(得分:1)
您需要两个convert()
函数:
SELECT PersonalDetails_DOB,
CONVERT(VARCHAR(10), CONVERT(DATE, PersonalDetails_DOB, 103), 102)
FROM Users;
答案 2 :(得分:0)
您可以尝试下面的查询,使用SUBSTRING()函数来更新日期值格式及其数据类型,如下所示
declare @PersonalDetails_DOB NVARCHAR(10)
set @PersonalDetails_DOB = '13/10/2018' --dd/MM/yyyy
select SUBSTRING(@PersonalDetails_DOB,7,4) + '-' + SUBSTRING(@PersonalDetails_DOB,4,2)
+ '-' + SUBSTRING(@PersonalDetails_DOB,1,2)
-- yyyy-MM-dd
create table Users(PersonalDetails_DOB NVARCHAR(10))
insert into Users values ('01/10/2018')
select * from Users --Before Update
--Updating date values
update Users
set PersonalDetails_DOB = (
SUBSTRING(@PersonalDetails_DOB,7,4) + '-' + SUBSTRING(@PersonalDetails_DOB,4,2)
+ '-' + SUBSTRING(@PersonalDetails_DOB,1,2)
)where PersonalDetails_DOB is not null
select * from Users --After Update
--Change the datatype
ALTER TABLE Users
ALTER COLUMN PersonalDetails_DOB date;
您可以找到实时演示Live Demo Here
答案 3 :(得分:0)
也许您应该在转换之前先设置日期格式:
let obj = this.state
obj.property1 = 'my new property1'
this.setState(obj)