❶ sql怎麼判斷全形字元
全形的字元字型大小比較大,空格也比較長
❷ SQL為啥不分半形與全形
這是一個實際一個項目中遇到的問題。03BHL01001(上海)和03BHL01001(上海)比較的結果是一樣的。導致引起的重復的主鍵問題。 03BHL01001(上海)和03BHL01001(上海)差別,就在於前者的括弧是全形的括弧字元,後者是半形的括弧字元。全形的括弧字元和半形的括弧字元的ascii碼顯然是不一樣的。全形的( ASCII碼是0xA3A8 ,而半形的( 是0x28。那麼為什麼SQL Server會認為是一樣的呢?問題其實就出在資料庫的排序規則上,讓我們在仔細研讀一下SQL Server的文檔。SQL Server的排序規則由這樣幾部分組成,代碼頁、區分大小寫、區分重音、區分寬度。最後一個在SQL Server的聯機幫助中沒有進一步提及,其實本篇遇到的問題就是由於這個原因造成的。區分寬度:指定 SQL Server 區分相同字元的單位元組表示法(半形)和雙位元組表示法(全形)。如果沒有選擇,則 SQL Server 將認為相同字元的單位元組表示法和雙位元組表示法等效。 預設,安裝SQL Server中文版的時候,SQL Server幫你選擇的排序規則是Chinese_PRC_CI_AS(Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive),是中文,不區分大小寫、區分重音、不區分假名、不區分寬度。因此,自然就認同03BHL01001(上海)=03BHL01001(上海)。bitsCN_com所以,正確的選擇應該是,後綴為WS的中文排序規則。本例中我們應該選擇Chinese_PRC_CI_AS_WS。 SELECT *FROM ::fn_helpcollations()可以查詢所有排序規則的信息。
❸ sql中如果數據有在全形下輸入的,又有半形下輸入的要怎麼區分
先用replace 將全形換為半形,而後再繼續處理
❹ SQL中的判斷語句
select
(case
when
b=c
then
a
else
b
end)
from
A
❺ sql 表中一個欄位里包含全形和半形括弧 查詢時如何忽略全形半形
建議你使用模糊查詢,忽略掉括弧。這樣就無需考慮全形還是半形了。
select 。。。。 from 表名 where 公司名稱 like '**化工%集團%';
❻ 如何用SQL語句挑出資料庫中數據其中一個項目中,含有全形字元(包括符號、數字、字母)的數據
select * from 庫名 WHERE 地址 LIKE'%0%'
再將全形的0改成全形的其他數據或字元,就可以了。
❼ sql中怎麼查詢出該欄位的所有的全形字元
select*fromtbwhereascii(col)=163這個col值只能按位取,一般不截取就檢索第一位字元
❽ plsql中,怎麼判斷參數的值是否為半形數字
又是一個沒說明數據環境的~~~~~~~~~~~~~~~~~~
sql server為例:用ASCII()函數可以判斷全半形字元。select ASCII('你要判斷的字元') 結果在0~255之間的都是半形字元,負數(如-23637)就是全形字元。
❾ sql裡面的空格區分全形和半形么
有區分的,有時切換到全形輸入時,字體間的間距會明顯變大,但不影響運行,只是不美觀而已。
❿ sql語句怎麼判斷一個字元是全形還是半形
selectunicode('s')
/*返回值為65281~65374,則是全形,33~126為半形*/
/*下面為全形與半形的轉換函數*/
ifobject_id(N'u_convert',N'FN')isnotnull
dropfunctionu_convert
GO
/*
轉換原理
全形字元unicode編碼從65281~65374
半形字元unicode編碼從33~126
空格比較特殊,全形為12288,半形為32
而且除空格外,全形/半形按unicode編碼排序在順序上是對應的
所以可以直接通過用+-法來處理非空格數據,對空格單獨處理
like的時候,指定排序規則COLLATELatin1_General_BIN
是保證字元順序按unicode編碼排序
*/
createfunctionu_convert(
@strnvarchar(4000),--要轉換的字元串
@flagbit--轉換標志,0轉換成半形,1轉換成全形
)
returnsnvarchar(4000)
AS
begin
declare
@patnvarchar(8),
@stepint,
@iint,
@spcint
if@flag=0
begin
select@pat=N'%[!-~]%',@step=-65248,
@str=replace(@str,N'',N'')
end
else
begin
select@pat=N'%[!-~]%',@step=65248,
@str=replace(@str,N'',N'')
end
set@i=patindex(@patcollateLATIN1_GENERAL_BIN,@str)
while@i>0
select@str=replace(@str,
substring(
@str,@i,1),
nchar(unicode(substring(@str,@i,1))+@step)),
@i=patindex(@patcollateLATIN1_GENERAL_BIN,@str)
return(@str)
end
GO
測試語句:
selectdbo.u_convert('11',1)as[a],'11'as[b],dbo.u_convert('111',0)as[c]