一、怎樣在數據庫中使用sql語句進行類型的轉換
字符串和整數日期都可以轉換的。
1.當字段類型為:INT;
2.傳入的值為:字符串類型;
*條件中的整型字段的傳入值用單引號或雙引號;
上述描述的前提條件下,會對把傳入的 值類型 轉換為 字段定義的數據類型,故WHERE 條件是可以使用到索引的,但從數據庫表讀出到內存塊后的值會被 轉換為 傳入值的數據類型,從而導致ORDER BY無法使用到索引
解釋為何ORDER BY ID沒有外部排序 或extra的內容為空,那是因為WHERE ID='2' 按主鍵查詢只能查到唯一的一條記錄,故不需要排序;
ORDER BY tid 時,WHERE tid='2' 按普通索引去查找的話,能查找到的數據條數會大于1條,加上數據類型隱形轉換了,為此需要再額外進行排序和extra部分有內容顯示;
二、sql語句將1,2,3字符串轉換為int類型
創建一個函數,把字符串變成表格
CREATE FUNCTION fn_StringSplitTable
(
@str NVARCHAR(MAX),
@split NVARCHAR(10)
)
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM
(
SELECT [value] = CONVERT(XML , '' + REPLACE(@str , @split , '') + '')
) A
OUTER APPLY
(
SELECT id = *('.' , 'nvarchar(100)')
FROM A.[value].nodes('/v') N ( v )
) B
)
Go
查詢可以為
select * from tb where id IN (SELECT CAST(id AS INT) FROM *_StringSplitTable('1,2,3', ','))
三、SQL語句類型轉換問題
--我在Sqlserver中
1.錯誤很明顯,你的b字段有不是全數字的字符串
如果不需要錯誤數據直接 使用isnumeric來判斷是否是數字,是返回1,不是返回0
上面改成這樣即可
select a,b
into #M
from S
--這里可以顯示轉換cast isnumeric(b) as int,也可以不轉換 數據庫會默認隱式轉換
select sum( Case when ISNUMERIC(b) = 1 then b ELSE 0 END ) from #M
2.如需要找到錯誤數據可以
SELECT *
FROM(
select *,Case when ISNUMERIC([ID]) =1 then [ID] ELSE 0 END AS 'aa' from #M
)as t WHERE aa=0
3.或用like方式也能找出不是數字的字符串
select *
from #M
WHERE id like '[0-9][0-9][0-9]'
四、sql 語句中的數據類型轉換
select top 8 * from list where CONVERT(datediff(d,mtitle,"&date()&")) <myouxiao order by [reads] desc,mid desc
datediff的datepart不用加引號的,Sql可以自動識別
哈哈,你的Convert沒有指定要轉換成的數據類型
CONVERT (data_type[(length)], expression [, style])
so:
select top 8 * from list where CONVERT(int,datediff(d,mtitle,"&date()&")) <myouxiao order by [reads] desc,mid desc
數據類型要和myouxiao一樣,我寫的是int
轉載請注明出處華閱文章網 » sql語句in類型轉換