2017-04-21 79 views
1

一个浮点数据类型使用LIKE操作我有存储在表A一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

@a_horse_with_no_name我编辑的发布包含DBMS。 –

+1

为什么这个使用float数据类型的整数列呢? –

+0

查看转化的结果:从表A转换(nvarchar的,DataColumn的) - 是小数,如果你有一些0小数尾它不会令人感到意外。 –

回答

1

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

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%' 

输出

DATA     D2 
---------------------- ---------------------------------------- 
1234554554.87893  1234554554.8789344000 
+0

您的解决方案可以工作,但是当我对我的实际数据运行它时,它仍然没有返回任何记录 –

+0

你可以发布一些数据(如果不同于你上面发布的内容)?我贴有样本数据的完整的脚本: – etsa

+0

不受查询 – etsa