nvarchar(100)转datetime问题

litengfei0020 2015-07-07 04:50:36
字段类型 yongtu nvarchar(100) 数据值 1998年3月
第一句代码
select DATEDIFF(YEAR,convert(datetime,REPLACE(REPLACE('1988年11月','年','-'),'月','-')+'01',102),GETDATE())

这句代码可以执行成功

但第二句代码
SELECT TOP 3000 [id]
FROM [Japan].[dbo].dt_article where (DATEDIFF(YEAR,convert(datetime,REPLACE(REPLACE(yongtu,'年','-'),'月','-')+'01',102),GETDATE())>25) and channel_id=2

就提示 从字符串转换日期和/或时间时,转换失败
...全文
207 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
DECLARE @date NVARCHAR(100)
SET @date='    1988年11月      '
SELECT CONVERT(datetime,REPLACE(REPLACE(@date,'年','-'),'月','-')+'01',102)
不知道你怎么回事了,试验了下有空格无空格这样都对的
幽幽揽持流年 2015-07-07
  • 打赏
  • 举报
回复
我也感觉是数据格式问题,yongtu字段的格式必须是这样的格式 1988年11月,否则报错
  • 打赏
  • 举报
回复
我错了,nvarchar不是自动填充空格的,但你可以试下Trim后对不对
引用 5 楼 starfd 的回复:
nvarchar(100) 自动填充空格的,所以需要去除左右空格(下面的LTrim一般可以去掉,因为填充空格是向右填充的)
convert(datetime,REPLACE(REPLACE(LTRIM(RTRIM(yongtu)),'年','-'),'月','-')+'01',102)
  • 打赏
  • 举报
回复
nvarchar(100) 自动填充空格的,所以需要去除左右空格(下面的LTrim一般可以去掉,因为填充空格是向右填充的)
convert(datetime,REPLACE(REPLACE(LTRIM(RTRIM(yongtu)),'年','-'),'月','-')+'01',102)
litengfei0020 2015-07-07
  • 打赏
  • 举报
回复
引用 3 楼 insus 的回复:
说明一些记录有其它字符。 替换之后,不能转换为日期时间。
数据库中只有条数据 我手动添加的 还是报错
insus 2015-07-07
  • 打赏
  • 举报
回复
说明一些记录有其它字符。 替换之后,不能转换为日期时间。
bdmh 2015-07-07
  • 打赏
  • 举报
回复
那就看yongtu字段是否都符合你的替换规则,第一句你是写死了一个日期,那样肯定没问题,但是你数据库中记录,就不一定每条都满足了
litengfei0020 2015-07-07
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
那就看yongtu字段是否都符合你的替换规则,第一句你是写死了一个日期,那样肯定没问题,但是你数据库中记录,就不一定每条都满足了
我试试了下 数据库表中只有一条符合条件的数据 还是报错

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧