2013-10-03 31 views
1

在MS SQL Server中,我有一个称为ID的类型为double的字段,它存储的ID号令人惊讶。 无论如何,我希望能够像文本一样搜索ID号码 - 比如说我想要所有以021开头或以04结尾的ID - 这样做我需要转换字符串的两倍。MS SQL Server:将双精度型转换为字符串并比较文本

我的问题是,这里的身份证号码是9位数字,所以当我尝试SELECT str([id])时,我收到类似02123+e23的信息,这对我的目的不合适。

如何将其转换为看起来完全相同的字符串,并且可以与其他字符串进行比较?

编辑:我试过SELECT str([id],9,0)并且我得到了正确的字符串,或者至少看起来对我来说是正确的,但是当比较相同的字符串时,比较失败。任何想法为什么?

谢谢!

+0

可以添加一些示例输入吗? –

回答

4

如果您的ID存储为数字,那么不会有前缀零,所以找到与“021”开头的所有记录真的意味着寻找那些与“21”

SELECT * FROM MyTable 
WHERE CAST(Id AS VARCHAR) LIKE '21%' 
+0

我注意到,这个工程时,我比较精确到6位数字的数字。任何更多的数字,这将失败。想想你知道为什么吗?谢谢 – Yotam

+0

对,对不起。我忘了将FLOAT类型列转换为VARCHAR时,它默认为6位数,并且在需要更多数字时使用科学记数法 - 请查看:http://technet.microsoft.com/en-us/library/ms187928。 ASPX。要解决这个问题,可以先将FLOAT数据转换为INTEGER数据类型,如下所示:'CAST(CAST(Id AS BIGINT)as VARCHAR)like '21%'' – Dan

+0

将很快检查出来,非常感谢 – Yotam

0

SELECT * FROM tablename WHERE SUBSTRING(CAST(id AS VARCHAR), 0, 9) = '123456789'