栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在SQL Server中标准化迄今为止格式不同的varchar字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在SQL Server中标准化迄今为止格式不同的varchar字段

对于可能的格式集,您已经描述了:

DECLARE @x TABLE(y VARCHAr(32))INSERT @x VALUES('11181980'),('8 18 1960'),('10/01/1960'),('04-12-1953'), ('041371'),('7/29/44'),(''), (NULL);SET DATEFORMAT MDY;SELECt ConVERT(DATETIME, CASE WHEN y LIKE '%/%' THEN y WHEN LEN(RTRIm(y)) = 0 THEN NULL WHEN LEN(RTRIm(y)) IN (6,8) AND ISNUMERIC(y) = 1 THEN STUFF(STUFF(y,3,0,'/'),6,0,'/') END)FROM (SELECt y = REPLACE(REPLACE(y, ' ', '/'), '-', '/') FROM @x) AS x;

根据服务器设置,这将解释

7/29/44
2044
,而不是
1944
。为了确保所有日期都是过去的日期,您可以执行以下操作:

SELECt y = DATEADD(YEAR, CASE WHEN y > GETDATE() THEN -100 ELSE 0 END, y) FROM(  SELECt y = ConVERT(DATETIME, CASE WHEN y LIKE '%/%' THEN y   WHEN LEN(RTRIm(y)) = 0 THEN NULL ELSE   STUFF(STUFF(y, 3, 0, '/'),6, 0, '/') END)  FROM (SELECt y = REPLACE(REPLACE(y, ' ', '/'), '-', '/') FROM @x) AS x) AS z;

这还取决于没有垃圾数据,不能将其压缩到一个日期中。什么样的系统进入这种不一致的废话呢?

在SQL Server 2012中,您将能够使用TRY_PARSE或TRY_CONVERT,但由于格式混乱,您仍然必须进行一些按摩才能获得有意义的结果。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号