0.第一步:创建视图V_dangyuan_3:

select  id,姓名,加入党组织日期,所在党委,所在党支部,
case
when year(getdate())-year(出生日期) between 0  and 30 then 'F:0 岁 ~ 30岁'
when year(getdate())-year(出生日期) between 31 and 35 then 'G:31岁 ~ 35岁'
when year(getdate())-year(出生日期) between 36 and 40 then 'H:36岁 ~ 40岁'
when year(getdate())-year(出生日期) between 41 and 45 then 'I:41岁 ~ 45岁'
when year(getdate())-year(出生日期) between 46 and 50 then 'J:46岁 ~ 50岁'
when year(getdate())-year(出生日期) between 51 and 55 then 'K:51岁 ~ 55岁'
when year(getdate())-year(出生日期) between 55 and 60 then 'L:55岁 ~ 60岁'
when year(getdate())-year(出生日期) between 61 and 65 then 'M:61岁 ~ 65岁'
when year(getdate())-year(出生日期) between 65 and 70 then 'N:65岁 ~ 70岁'
when year(getdate())-year(出生日期) between 71 and 99 then 'O:71岁 -岁'
end as 分类
FROM  dangyuan
where isdate(出生日期)=1

1.第一步:查询执行成功。

2 .第二步:执行失败

为什么?从字符串转换日期和/或时间时,转换失败?

3.答案 :视图的case语句需要再嵌套一层。仅仅在where部分限制条件还不够。

由于原始数据存在异常,通过where条件过滤。MSSQL仍然认为存在。

case isdate(出生日期) when 1 then
case 。。。

开发人员有 候使用类似下面 SQL 字符串 转换 日期 时间 类型,乍一看,这样的 SQL 的写法是没有什么问题的。但是这样的 SQL 其实有 候就是一个定 炸弹,随 可能出现问题(),下面简单对这种情况进行一个简单概括。 SELECT CONVERT(DATETIME, '2020-01-13 6:46:42'); 如果你将连接 数据库 的登录名的默认语言修改为Aribc,然后去执行上面 SQL 语句,就会遇到错误,为什么呢? 为什么上面 SQL 日期 转换 出错了呢?其实是因为登录名修改默认语言后,会话对应的date_format变化了,从mdy变成了dmy,所以上面 转换 就报错了,有 候不报错,但是可能 转换 成一个错 你可以使用TRY_CONVERT函数来尝试将 字符串 转换 日期 时间 格式,如果 转换 失败 ,则返回NULL。然后你可以使用IS NOT NULL来过滤掉这些NULL值。出现这个错误是因为你在 SQL Server中尝试将一个无效的 字符串 转换 日期 时间 格式。如果你想要更细致的控制,可以使用TRY_CAST或TRY_PARSE函数来尝试将 字符串 转换 为特定的数据类型。这些函数可以帮助你处理不同的 日期 时间 格式,以及不同的语言和区域设置。这将返回所有可以成功 转换 日期 格式的行,而过滤掉那些无法 转换 的行。 楼主最近遇到了困扰2小 的问题,如下: 是数据迁移,从my sql sql server ,会报’从 字符串 转换 日期 和/或 时间 转换 失败 ’。网上查了很多方法 都不行。 最后发现是数据扥问题,也就是说my sql 可以认0000-00-00 00:00:00的这个 时间 数据而 sql server无法识别,所以会报错。因为不是合法有效的数据,只要将其改为合法数据即可 Microsoft SQL Server Developer Edition (64-bit) Microsoft SQL Server Enterprise Edition (64-bit) 企业版的报错 : 查询 top(100 问题描述: SQL Exception: com.microsoft. sql server.jdbc. SQL ServerException: 从 字符串 转换 日期 和/或 时间 转换 失败 。 Msg 241, Level 16, State 1, 从 字符串 转换 日期 和/或 时间 转换 失败 。 问题分析: 1、在 SQL Server中datetime类型的值跟varchar类型的值比较,会将varchar类型的值先转为datetime类型,这样会报错。 select * from t_users where 1=1 1、更改查询条件 时间 格式 select count(1) from table where field= '1' and field> '2021-04-01 00:00:00' and field< '2021-05-01 00:00:00' #更改之后 select count(1) from table where field= '1' and field> '2021-04-01 00:00:00' and field< '2021/05/01 00:00:00' 今天生成环境出现了一个问题,在使用UNION联合查询两个订单表的 候,老是提示: 从 字符串 转换 日期 和/或 时间 , 转换 失败 ,然后看了一下数据,没有问题啊,所有的 时间 都是有数据并且格式十分正确。 在执行插入 sql 候报错:[ SQL Server]从 字符串 转换 日期 和/或 时间 转换 失败 。(241),查看了表字段,插入值均是正常的,又查看了不为空字段也是正常的,datatime字段也都正常,但就一直报错,在排除故障中,尝试把所有datatiem字段都删除,这个可以为空的datatime字段不能删除。就尝试添加该字段,就OK了。也不知道是什么原因。有大佬看到,麻烦指点一二。后来发现有一个datatime字段是可为空的,在插入语句中添加该字段后,发现正常, sql server中拼接 字符串 ,需要把datetime型转化为char型才能进行拼接。与int转char类型不同,其需要多加引号: declare @Dtime datetime set @Dtime = '2020-03-05 14:16:36' select 'INSERT into table1(pointID) VALUES ('+@Dtime+');' 错误提示:从 字符串 转换 日期 和/或 时间 转换 失败 。 (241) 解决方法: 外多加个引号 declare @Dtime da