我需要一个帮助n查询
"totalexp"是一个nvarchar字段......在表格中我需要选择如下所示
select EmpId,FirstName,totalexp from sample where totalexp > '6'
empid firstname totalexp
1 Me 8.2
5 as 6
10 567 64 mon
11 leader 6+ yrs
12 admintest 6.3
16 G 6
Run Code Online (Sandbox Code Playgroud)
我有11,12,21等值,所有这些都没有显示那些东西
如果无法更改列类型,则必须在执行比较之前使用CAST或CONVERT.你的代码是:
SELECT EmpId, FirstName, TotalExp
FROM sample
WHERE CAST(TotalExp AS INT) > 6
Run Code Online (Sandbox Code Playgroud)
一点警告:对于您当前的数据库结构,任何人都可以将TotalExp作为"一个"或"两个"或任何其他任意字符串插入,您的查询将失败.真的不是你想要发生的事情.
小智 6
我知道这个问题很老了。只是发布答案,因为它可能对某些人有帮助。
以下代码可用于其他行存在非数值的场景。
SELECT EmpId,FirstName,totalexp
FROM sample
WHERE
(CASE
WHEN (ISNUMERIC(totalexp) = 1)
THEN CAST(LTRIM(RTRIM(totalexp)) AS float)
ELSE 0 END) > 6
Run Code Online (Sandbox Code Playgroud)
代码已测试工作
混乱开始于TotalExp为nvarchar,因为它包含的数据可能是"6个月","6年","6 + yrs"等.背后的意图是什么
where totalexp > '6'
Run Code Online (Sandbox Code Playgroud)
?6年,6个月,65天?
您需要将数据转换为数字格式,例如可以与某些要求进行比较的数月(作为"月经验").
但是,在一年内,您的数据将变得过时,因为它不会改变,因为除了现在表示"6年"的每个TotalExp应该是"7年"(如果在此期间已经实施该技能)之外.
因此,对于主动技能,最好有一个ExperienceSince DATETIME字段,它具有良好的效果,其产生的"总体验"始终是最新的.
| 归档时间: |
|
| 查看次数: |
32521 次 |
| 最近记录: |