一个基本的sql查询问题请教

nyyswd1978 2014-04-24 08:33:24
我有一个表a中有一个字段b 此字段类型为char(2)。存储的是代表日期的1-31的日期
现在我要实现一个检索。就是和当前的日期比较大小。得到大于或等于当前日期的结果集。
比如 当前是日期是5号。我要检索5号含5号之后的结果集
正确结果应该是从5,6,7,8,9。。。。。31
但是因为是char类型。所以结果集中从2位开始的日期。比如10,11,12等都检索不到。

所以想是不是有2种方法:
1。sql有转换类型的比较方法么?
select b from a where 函数临时转换(b)〉= 5?
2。sql能临时判断字段值的位数。不足2位子自动+0?
select b from a where 函数判断为数+0(b)〉=05?

请指教。我是新手。还望耐心讲解。谢谢
...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xb8315381 2014-04-25
  • 打赏
  • 举报
回复
学习
giftzheng 2014-04-25
  • 打赏
  • 举报
回复
char(2)改成tinyint
cy2889792 2014-04-25
  • 打赏
  • 举报
回复
太简单了,楼主,一条语句搞定,给分

SELECT A FROM TABLE
WHERE CONVERT(INT,A)>=DATEPART(DAY,GETDATE())
专注or全面 2014-04-24
  • 打赏
  • 举报
回复
另外提示一下楼主 当字段类型为字符型的时候,去跟整型数值比较 类似你的 where B>5 数据库会自动做一个隐式转换,也就是把列B的值转化为整数,一切看起来都没有问题 但是 当B列中存储了非数值的字符时,查询时会报错的,因为列B的值将无法转化为整数 当然B列是字符型的,跟字符型的‘5’来做比较,是不会有这个隐式转换的,不管B列中存储了任何值,都是没问题的
专注or全面 2014-04-24
  • 打赏
  • 举报
回复
其实蛮喜欢回答类似问题的,自己的问题自己思考过了,思路也都有了,仅仅是一些知识点没用过 不是这个东西不会,仅仅是不知道,或者是没用过,问一下就清楚了 不过我试了一下,关于char(2)类型跟5是可以比较的啊

create table #t
(
 id char(2)
)


declare @i int
set @i=0
while @i<30
begin
	insert into #t values (@i)
	set @i=@i+1
end

select * from #t where ( case when(id<9) then '0'+id else id end) >5

select case when(id<=9) then '0'+id else id end from #t

select * from #t where id>5

--结果就不贴了,楼主可以试一下
  • 打赏
  • 举报
回复
select * from @t where CAST(b as int)>5
专注or全面 2014-04-24
  • 打赏
  • 举报
回复
那就 CAST(B as int)>5了

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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