Sql 字段的一部分是日期…有时
在一个数据表中有一个字段,它是姓名,在大约70%的时间里,也包括人的生日。 这个生日我需要提取到一个新字段,但是下面插入的脚本抛出了一个 从“字符串”错误消息转换日期和/或时间时,转换失败 (我明白原因)。 我尝试使用“case-when”类型的代码,但最终没有成功Sql 字段的一部分是日期…有时,sql,sql-server,date,case,Sql,Sql Server,Date,Case,在一个数据表中有一个字段,它是姓名,在大约70%的时间里,也包括人的生日。 这个生日我需要提取到一个新字段,但是下面插入的脚本抛出了一个 从“字符串”错误消息转换日期和/或时间时,转换失败 (我明白原因)。 我尝试使用“case-when”类型的代码,但最终没有成功 select [NAM_FULL_NAME_INR] ,datepart(month, CONVERT(date, SUBSTRING([NAM_FULL_NAME_INR], patindex('%[0-9][0-
select [NAM_FULL_NAME_INR]
,datepart(month, CONVERT(date, SUBSTRING([NAM_FULL_NAME_INR], patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', [NAM_FULL_NAME_INR]), 50))) AS MONTHARCHIVED
,datepart(YEAR, CONVERT(date, SUBSTRING([NAM_FULL_NAME_INR], patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', [NAM_FULL_NAME_INR]), 50))) AS YEAR_ARCHIVED
FROM tablename
有人可以帮忙吗?如果生日总是采用相同的格式,您可以使用SQL Server中类似的
的模式功能来检查结尾是否有生日。使用[0-9]
匹配任何单个字符形式0
到9
。可以随时匹配任何字符
因此,要检查生日的LIKE
表达式是:
%[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]
如果附加了生日,则将其打包到
CASE…ENDs中,以提取并可能转换子字符串
由于生日模式具有固定长度,因此可以通过使用substring()
、len()
和一些算术运算来实现
convert()
然后使用德语日期样式将字符串转换为日期(104
四位年份)
请将表的
CREATE TABLE
语句和示例数据作为INSERT-INTO
语句共享。您使用的是哪种dbms?(该查询使用特定于产品的函数。)示例数据、期望的结果和数据库标记将非常有用。示例数据最好作为+。请将您的问题包括在内,包括您当前的尝试和期望的结果。有关更多详细信息,请询问调试帮助(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。
SELECT CASE
WHEN nam_full_name_inr LIKE '%[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]' THEN
substring(nam_full_name_inr, 1, len(nam_full_name_inr) - 11)
ELSE
nam_full_name_inr
END name,
CASE
WHEN nam_full_name_inr LIKE '%[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]' THEN
convert(date, substring(nam_full_name_inr, len(nam_full_name_inr) - 9, 10), 104)
END birthday
FROM elbat;