SQL的select查询,字符型转int型并进行运算的问题

skyan 2003-05-21 11:52:04
两个字符型的字段转成整型,并按price1与price2 相除得出的结果排序的查询

select id,price1/price2 as price from table order by price1/price2

select id,convert(int ,price1)/convert(int ,price2) as price from table order by convert(int ,price1)/convert(int ,price2)

上面两个查询语句都错了,为什么?
...全文
486 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyan 2003-05-21
  • 打赏
  • 举报
回复
price1 里面有333.00等小数点位
windowsDNA 2003-05-21
  • 打赏
  • 举报
回复
你用odbc连数据库?试试用ADO的oledb
tripofdream 2003-05-21
  • 打赏
  • 举报
回复
错不在此
skyan 2003-05-21
  • 打赏
  • 举报
回复
sql="select id from product" 完全正常

sql="select id ,convert(int,Price1) from product" ODBC 驱动程序不支持所需的属性

sql="select id ,convert(int,Price1) as aaa from product" ODBC 驱动程序不支持所需的属性

奇怪,为什么???price1 是 nvarchar类型,调试环境是ASP+SQL server
lsrzm 2003-05-21
  • 打赏
  • 举报
回复
用一个数除以另一个数(算术除法运算符)。
语法
dividend / divisor
参数
dividend
是要被除的数字表达式。dividend 可以是数字数据类型分类中的任何数据类型(datetime 或 smalldatetime 数据类型除外)的任何有效 Microsoft® SQL Server™ 表达式。
divisor
除数的数字表达式。divisor 可以是具有数字数据类型分类中任何数据类型(datetime 和 smalldatetime 数据类型除外)的任何有效 SQL Server 表达式。
结果类型
返回优先级较高的参数的数据类型。有关数据类型优先级的更多信息,请参见数据类型的优先顺序。
如果用一个整型的 divisor 去除整型的 dividend,其结果是一个整数,小数部分被截断。
注释
由 / 运算符返回的实际值是用第一个表达式除以第二个表达式所得的商。

skyan 2003-05-21
  • 打赏
  • 举报
回复
to windowsDNA(N层架构)

还是不行
windowsDNA 2003-05-21
  • 打赏
  • 举报
回复
convert(decimal(20,2),pirce1)
windowsDNA 2003-05-21
  • 打赏
  • 举报
回复
b为虚拟表
skyan 2003-05-21
  • 打赏
  • 举报
回复
price1 和 price2 都是nvarchar类型
skyan 2003-05-21
  • 打赏
  • 举报
回复
to vulcan(东方不败)
还是不行。。。ODBC 驱动程序不支持所需的属性
skyan 2003-05-21
  • 打赏
  • 举报
回复
这是一个表里的两个字段的比较,楼上的怎么出来一个b表?
vulcan 2003-05-21
  • 打赏
  • 举报
回复
try:
select id,price1/isnull(price2,1) as price from table order by price1/isnull(price2,1)
windowsDNA 2003-05-21
  • 打赏
  • 举报
回复
select a.id,b.price from a,(select id,price1/price2 as price from a) b where a.id=b.id order by b.price
xayzmb 2003-05-21
  • 打赏
  • 举报
回复
用iif函数将0转换成1或做别的处理
skyan 2003-05-21
  • 打赏
  • 举报
回复
应该没有被0除的情况
报错是:ODBC 驱动程序不支持所需的属性。

应该是查询语句写错了,恳请高人指点
maconelxp 2003-05-21
  • 打赏
  • 举报
回复
有可能遇到被0除的情况
skyan 2003-05-21
  • 打赏
  • 举报
回复
已经解决了,谢谢大家的热情帮助

错误的原因不是语句错误,而是我数据库中的数据位数太大,造成了算术溢出错误,用下面的语句可以控制,比如说最大数据有8位(小数点前),那么numeric(x, 2)的数字就是8

SELECT id, CONVERT(numeric(8, 2), Price1) / CONVERT(numeric(8, 2), Price2) AS price
FROM [table]
ORDER BY CONVERT(numeric(8, 2), Price1) / CONVERT(numeric(8, 2), Price2)

希望能给大家带来一些帮助
summercat 2003-05-21
  • 打赏
  • 举报
回复
关注:

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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