2017-04-21 76 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