在Float数据类型上使用LIKE运算符进行部分搜索

时间:2017-04-21 07:05:27

标签: sql sql-server

我在TableA中将以下数据集存储为float数据类型:

    DataColumn
    ----------
    1234554554
    2566854545
    9845684585
    6399421226

现在当我使用like运算符执行select语句来搜索确切的模式时,我确实得到了结果,例如:

select * from TableA where DataColumn='2566854545'

将输出所需的结果:

2566854545

但是现在当我想在模式结束时使用值进行部分搜索时,我总是得到0结果,即:

select * from TableA where convert(nvarchar, DataColumn)  LIKE '%545'

这没有找到任何记录。我也尝试将它转换为nvarchar,但我也得到了相同的结果。我看了Like operator for integerSQL server 'like' against a float field produces inconsistent results,但仍然没有。

有关我可能出错的地方的任何建议吗?

1 个答案:

答案 0 :(得分:1)

试试这个(你应该争论为什么演员表不起作用)。为小数值添加了第二个版本。请注意性能(where子句中的函数可能导致不使用列上最终存在的索引)。

UPDATE calldata SET date = '2014-01-01' WHERE date = '2014-01-01'

输出:

 CREATE TABLE #tt1 (DATA FLOAT);
    INSERT INTO #tt1 VALUES (2556668545);

    SELECT DATA, STR(DATA) AS D2, CAST(DATA AS VARCHAR(20)) D3 FROM  #tt1
where STR(DATA)  LIKE '%666%'

添加版本(基于小数值,未在您的问题中显示):

DATA                   D2         D3
---------------------- ---------- --------------------
2556668545             2556668545 2.55667e+009

输出

CREATE TABLE #tt1 (DATA FLOAT);
INSERT INTO #tt1 VALUES (2556668545);
INSERT INTO #tt1 VALUES (1234554554);
INSERT INTO #tt1 VALUES (1234554554.8789345);

SELECT DATA, CAST( CAST(DATA AS NUMERIC(38,10)) AS VARCHAR(40)) AS D2
 FROM  #tt1
where CAST( CAST(DATA AS NUMERIC(38,10)) AS VARCHAR(40))  LIKE '%89%'