我有兩列的表,一個是Varchar
類型和其他在NVarchar
的。SQL服務器:爲nvarchar爲varchar
我想更新所有的行,以便VarcharField = NVarcharField。
它不會讓我,因爲某些行包含未在varchar
列允許與當前代碼頁字符。
我怎樣才能找到這些行?
是否可以刪除不適合我使用的是特定的代碼頁中的任何字符?
SQL Server 2012的
我有兩列的表,一個是Varchar
類型和其他在NVarchar
的。SQL服務器:爲nvarchar爲varchar
我想更新所有的行,以便VarcharField = NVarcharField。
它不會讓我,因爲某些行包含未在varchar
列允許與當前代碼頁字符。
我怎樣才能找到這些行?
是否可以刪除不適合我使用的是特定的代碼頁中的任何字符?
SQL Server 2012的
如果因爲你從TRY_CONVERT
而不是預期的NULL
得到問號Gordon's approach不起作用,試試這個方法:
SELECT IsConvertible = CASE WHEN NULLIF(REPLACE(TRY_CONVERT(varchar(max), N'人物'), '?',''), '') IS NULL
THEN 'No' ELSE 'Yes' END
如果你需要它作爲過濾器不能轉換的行:
SELECT t.*
FROM dbo.TableName t
WHERE NULLIF(REPLACE(TRY_CONVERT(varchar(max), t.NVarcharField), '?',''), '') IS NULL
您可以嘗試轉換的nvarchar()
山坳到varchar()
找到行:
select nvarcharcol
from t
where try_convert(varchar(max), nvarcharcol) is null;
它是否工作?因爲當我使用它'try_convert'返回'??'不爲空的中文字母。經過測試:'SELECT try_convert(varchar(max),N'人物')' –
這個轉換爲什麼會失敗?這個答案對我來說沒有意義。 – DavidG
@TimSchmelter,也許你現在的代碼頁支持中文? –
試試這個..
與那些價值發現的行不支持varchar
declare @strText nvarchar(max)
set @strText = 'Keep calm and say தமிழன்டா'
select cast(@strText as varchar(max)) col1 , N'Keep calm and say தமிழன்டா' col2
這裏@strText
有非英文字符,當您嘗試cast
到這一點varchar
非英語字符變成????
。所以col1
和col2
是不相等的。
select nvar_col
from tabl_name
where nvar_col != cast(nvar_col as varchar(max))
是否可以刪除不適合我使用的是特定的代碼頁中的任何字符?
update tabl_name
set nvar_col = replace(cast(nvar_col as varchar(max)),'?','')
where nvar_col != cast(nvar_col as varchar(max))
與空字符串替換?
和更新。
你真的想刪除不支持的字符嗎?你爲什麼需要這個? –
我無法使用Nvarchar。 –