在 SQL 查询中将 Nvarchar DD/MM/YYYY 转换为 YYYY-MM-DD

问题描述 投票:0回答:5

您好,我的“用户”表中有一个名为“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

sql sql-server string date format
5个回答
2
投票

您需要两个

convert()
功能:

SELECT PersonalDetails_DOB, 
       CONVERT(VARCHAR(10), CONVERT(DATE, PersonalDetails_DOB, 103), 102)
FROM Users;

2
投票

将日期存储为日期,而不是字符串。我建议您将值提取为日期而不是字符串:

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;

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;

您可以找到现场演示此处现场演示


0
投票

也许你应该在转换之前先设置日期格式:

set dateformat dmy;
select PersonalDetails_DOB
    ,convert(nvarchar(10), cast(PersonalDetails_DOB as datetime), 102) as ANSI_DOB
    ,convert(nvarchar(10), cast(PersonalDetails_DOB as datetime), 120) as ODBC_DOB
from Users;

0
投票

选择转换(日期,转换(日期时间,YourDateColumn,103),23)AS FormattedDate 来自您的餐桌;

声明 @VoucherDate nvarchar(15)='07/05/2024' 选择转换(日期,转换(日期时间,@VoucherDate,103),23)AS Converted_YYYY_MM_DD

© www.soinside.com 2019 - 2024. All rights reserved.