DECLARE @A VARCHAR(20), @B VARCHAR(20)
SET @A = '1702010070'
SET @B = '17-2007-0002'
IF @A > @B
PRINT '“1702010070”大'
ELSE
PRINT '“17-2007-0002”大'在sqlserver中比较是“17-2007-0002”大
但在delphi中比较是“1702010070”大因为字符串前两位相同,在ASCII中第三位“0”比“-”大,所以我也认为是“1702010070”大,
可sqlserver认为是“17-2007-0002”大,我不清楚依据是什么,有没有办法使得“1702010070”比“17-2007-0002”大呢
因为数据库中涉及对某个字段排序,所以才发现以上问题
SET @A = '1702010070'
SET @B = '17-2007-0002'
IF @A > @B
PRINT '“1702010070”大'
ELSE
PRINT '“17-2007-0002”大'在sqlserver中比较是“17-2007-0002”大
但在delphi中比较是“1702010070”大因为字符串前两位相同,在ASCII中第三位“0”比“-”大,所以我也认为是“1702010070”大,
可sqlserver认为是“17-2007-0002”大,我不清楚依据是什么,有没有办法使得“1702010070”比“17-2007-0002”大呢
因为数据库中涉及对某个字段排序,所以才发现以上问题
解决方案 »
- 问题 SQL 约束
- 存储过程里为什么不执行两条操作啊??
- bcp导入DBF到sql的问题
- 求一sql语句~
- 如何在存儲過程中用datetime
- 一个已经创建的表中的某个属性在创建时允许为NULL,怎样添加NOT NULL约束?
- 请教一个关于varbinary数据的问题,有点长...见谅...
- 請問用SQL*Plus怎麼插測試數據到 blob 型字段中去???
- 初学者问:我在sql*plus workssheet里用delete删除一表所有行,执行后提示删除所有行成功,可是我第二次开启sql*plus workssheet时执行select后发现刚才的那张表记录并没被删除,这是为何?
- 创建教师表设置默认值出错
- 怎样把两列数据对应行相加减?
- 请问下谁有MSSQL2005数据库备份工具
declare @a varchar(20), @b varchar(20)
set @a = '0'
set @b = '-'
if @a > @b
print '0>-'
else
print '0<-';
/*
0>-
*/
declare @c varchar(20), @d varchar(20)
set @c = '170'
set @d = '17-'
if @c > @d
print '170>17-'
else
print '170<17-';
/*
170>17-
*/
declare @e varchar(20), @f varchar(20)
set @e = '1702'
set @f = '17-2'
if @e > @f
print '1702>17-2'
else
print '1702<17-2';
/*
1702<17-2
*/
set @a = '172'
set @b = '17-2'
if @a > @b and @a <> @b
print '172>17-2'
else
print '172<17-2';
/*
172<17-2
*/declare @c varchar(20), @d varchar(20)
set @c = '172-'
set @d = '17-2'
if @c > @d and @c <> @d
print '172->17-2'
else
print '172-<17-2';
/*
172->17-2
*/declare @e varchar(20), @f varchar(20)
set @e = '172' + char(1)
set @f = '17-2'
if @e > @f and @e <> @f
print '172+char(1)>17-2'
else
print '172+char(1)<17-2';
/*
172+char(1)>17-2
*/declare @g varchar(20), @h varchar(20)
set @g = '172' + char(0)
set @h = '17-2'
if @g > @h and @g <> @h
print '172+char(0)>17-2'
else
print '172+char(0)<17-2';
/*
172+char(0)<17-2
*/
SQL server将‘17-2’变成一个仅大于‘172’而小于‘172’+ char(1)的字符串了,我认为这是它的bug。
declare @table table (data varchar(12))
insert into @table
select '1702010070' union all
select '17-2007-0002'select * from @table order by data desc
/*
data
------------
17-2007-0002
1702010070
*/--处理后的
select * from @table order by replace(data,'-',',') desc
/*
data
------------
1702010070
17-2007-0002
*/