Sql 如何将Dateofbirth列转换为Dateformat(DD/MM/YYYY)
我有一张表,上面有这样的列Sql 如何将Dateofbirth列转换为Dateformat(DD/MM/YYYY),sql,sql-server,Sql,Sql Server,我有一张表,上面有这样的列 Actual data wanted data 0k1/01/1976 --01/01/1976 1-1-1991 --01/01/1991 08/04/1968i -- 08/04/1968 18-05-1987j -- 18/05/1987 5d60 -- null I 5 7 1931 -- Null 12/06/1981v -- 12/06/1981 7-12-2012k -- 07/12/2012 6r6r6rr7t7t7t
Actual data wanted data
0k1/01/1976 --01/01/1976
1-1-1991 --01/01/1991
08/04/1968i -- 08/04/1968
18-05-1987j -- 18/05/1987
5d60 -- null
I 5 7 1931 -- Null
12/06/1981v -- 12/06/1981
7-12-2012k -- 07/12/2012
6r6r6rr7t7t7t -- null
我已尝试使用PATINDEX和replace函数,但无法继续创建此函数
alter function [dbo].[RemoveAlphaCharacters](@Temp nvarchar(1000))
returns nvarchar(1000)
as
begin
declare @KeepValues as nvarchar(50)
set @KeepValues = '%[^0-9,/,-]%'
while patindex(@KeepValues, @Temp) > 0
set @temp = stuff(@Temp, patindex(@KeepValues, @Temp), 1, '')
return @temp
end
go
试验
结果
参考资料:这将适用于SQL server 2005+。该函数只调用一次,而不是3次,因此速度要快一点
SELECT
DOB Original,
RemoveNumber,
CASE WHEN isdate(RemoveNumber) = 1
THEN convert(datetime, RemoveNumber) END [DateTime]
FROM yourtable
CROSS APPLY(SELECT dbo.RemoveAlphaCharacters(DOB) RemoveNumber) x
您需要Rawitas Krungkaew回答中的函数这是您的实际出生日期数据吗?还是那些拼写错误?我希望它们是拼写错误,我甚至不知道如果将sql表设置为日期字段,如何在sql表中获得这样的数据。第一步,清理数据。它看起来像混合数据。您使用的是哪种数据类型?对于如此糟糕的数据,您确定值得尝试修复其中的任何一种吗?您确定任何不明确的日期都是什么意思吗?非年值在1-12范围内,表示可以是日/月或月/日?像您这样的人有这样的含义。非常感谢成为它的一部分@Rawitas Krungkaewcan相同的代码将在2008r2@Rawitas krungkaeworry中工作,我没有安装2008r2。@mohan111 IFF是sqlserver 2012。但很容易转换到2005年
Original RemoveAlp DateTime
0k1/01/1976 01/01/1976 1976-01-01 00:00:00.000
1-1-1991 1-1-1991 1991-01-01 00:00:00.000
08/04/1968i 08/04/1968 1968-08-04 00:00:00.000
18-05-1987j 18-05-1987 NULL
5d60 560 NULL
I 5 7 1931 571931 NULL
12/06/1981v 12/06/1981 1981-12-06 00:00:00.000
7-12-2012k 7-12-2012 2012-07-12 00:00:00.000
6r6r6rr7t7t7t 666777 NULL
SELECT
DOB Original,
RemoveNumber,
CASE WHEN isdate(RemoveNumber) = 1
THEN convert(datetime, RemoveNumber) END [DateTime]
FROM yourtable
CROSS APPLY(SELECT dbo.RemoveAlphaCharacters(DOB) RemoveNumber) x