字符串处理和数据类型转的
昨天同事给我一个Excel文件,需要分析其中的数据,具体格式如下:
运单单号提车票号分票日期出库日期限达日期实达日期限返日期实返日期商品系列车型编码颜色底盘号出库单号备注/09//09/262007/09/262007/09/262007/09/26OU /09//09/182007/09/182007/09/182007/09/18OU /10//10/292007/10/272007/11/032007/11/03OU /01//01/122007/01/122007/01/172007/01/17OU /01//01/162007/01/152007/01/222007/01/17OU /01//01/162007/01/152007/01/222007/01/17OU
将Excel文件导入到sql server 中,发现其中的限达日期等日期类型都识别成了nvarchar(255)类型,无法使用时间函数进行数据分析,如果强制性的在表设计器中更改数据类型为datetime就会报错,无法继续:
继续上搜索,大部分的解决方案是用convert 和cast函数,转换,就直接测试用如下语句转换:
select convert(datetime,限达日期) from wkck
用
select cast(限达日期 as datetime) from wkck 都报如下的错误:
服务器: 消息 241,级别 16,状态 1,行 1
从字符串转换为 datetime 时发生语法错误。
难道是语法错误,或者是上的说明有误,仔细查看convert 和cast函数的使用说明,可以从nvarchar类型转换为datetime类型,这就引起了我的警觉,看来是输入的数据有问题:
为了验证我的判断,我用如下语句测试一下:
select left(限达日期,10) from wkck
返回数据是如下格式:
2007/09/2
不对啊,导入的数据日期格式是\"2007/01/01\",一共是10个字符,怎么最后一个字符没有显示?
这个测试基本证实了我的判断,在导入的日期字符串的开头有一个空格,导致convert或者cast函数执行的时候因为字符不符合datetime的规则而报错,知道了这个原因就好办了,先用
select LTRIM(实达日期) FROM wkck 等语句删除空格,发现字符的格式没有变,开头还是有空格,先后测试了left,right等字符串函数,最后用sunbstring函数解决问题,如下:
SELECT SUBSTRING(实返日期,2,12) FROM wkck
结果:2007/09/26
空格去掉,执行转换:
SELECT convert(datetime,SUBSTRING(实返日期,2,12)) FROM wkck
结果: 00:00:00.000
OK!完成任务
见汇款到账 本次处理的体会:
在做字符串处理之前一定到好好分析一下自己的数据: 应用程序的在输入数据时要加强控制,避免空格的输入: 遇到问题,多测试比较,肯定能有所收获 本次问题消耗我一天的时间,惭愧!惭愧!希望增长这方面的经验和教训,以后少在此方面走弯路!
Trackback:
人体气虚吃什么好忻州治疗白癜风费用
南宁男科医院哪好
- 上一页:如何识别真实和自动创建呢
- 下一页:存储图像数据的策略与方
-
新纪元古玩艺术品在线模拟器:精品推荐——佳品磁铁陨石
赛德娜被称为“来自点点的青石块”,是银河系以外未燃尽的混沌流星瓦解旧...
2024-01-08
-
FCC文件阐述苹果神秘的“网络适配器”,运行iOS系统
IT之家 5 月 22 日通告,支持蓝牙或 Wi-Fi 的商品都必须得到 FCC 等监管政府机构...
2023-12-09
-
2022绍兴市公务员考试笔试时间重启公告
一、出题一段时间和课程内容 (一)课程内容任用公职人员出题一段时间和课程...
2023-11-19
-
哪有什么真直男 都是装直男 他发觉你生气了 需要哄 也发觉消息要及时回 也发觉要关心你 给你买喜欢的
哪有什么真直男 都是装直男 他究竟你羞愧了 必须拚命 也究竟消息要及时返...
2023-11-18
-
共赏盛夏奇观!vivo S15系列快闪大型活动来袭,热闹非凡
就在日前,vivo另一款了全新的#vivo S15#复刻版APP,欣赏了网友们的关注。为了...
2023-11-05
-
随着美债收益率溢价收窄 对于美元见顶的猜测降温
随着围绕澳大利亚在经济上衰弱的担心加剧,引发美债股票价格下行,旋风美...
2023-10-31