关于字符串比较的问题 (50分)

  • 主题发起人 主题发起人 MichaelZhu
  • 开始时间 开始时间
M

MichaelZhu

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,我在用SQL时,遇到一个问题:
一个表中有两个字段,均为nvarchar,其中的值大多是形如:123456,123458
但是也有A123456,A123458
我现在需要比较这两个字段值间的距离,如123458与123456之间可通过CAST转换类型再相减,得出3
但是对于形如:A123456,A123458这类值,CAST无法完成转换。请问,有没有办法实现此类值的求距?
 
用SUBSTRING函数截取其中的数字
 
你的前缀字母长度是否确定,如果是,你在求前先判断是否有前缀
如果有,则去掉再CAST。
 
我记得以前在别的语言中,好像可以直接相减。
在Delphi中,或是SQL中有没有办法直接相减呢?
 
直接相减不大可能实现。能否将'A'替换成'0'再进行转换呢?
要不就将它们看成十六进制字符串,用 StrToInt('$'+'A123458')-StrToInt('$'+'A123456') 来计算。 :P
 
可是在SQL中, StrToInt通不过,用CAST好像不行了。
 
出现以下错误:
将 nvarchar 值 '$A123458' 转换为数据类型为 int 的列时发生语法错误。
 
先取得A的位置CharIndex('A',YourChar)
去掉'A',SubString(YourChar,CharIndex('A',YourChar)+1,Len(YourChar))
然后再用cast转换OK?
 
第一种方法:
CAST(REPLACE('A123456', 'A', '0') AS int)
或者: CAST(REPLACE('A123456', 'A', '10') AS int) (防止和'123456'混淆)
第二种方法:
找了半天,没找到 :( 看来只能自己写SQL函数进行十六进制求值了
 
多人接受答案了。
 
后退
顶部