我在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 integer和SQL server 'like' against a float field produces inconsistent results,但仍然没有。
有关我可能出错的地方的任何建议吗?
答案 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%'