我们有2个应用程序。一个应用程序使用SQL Server作为后端,另一个应用程序使用Oracle。
在第一个应用程序中,用户可以输入一些信息,第二个应用程序从SQL Server获取数据并将其插入到oracle中。
问题在于用户可以以任何语言输入下表显示了示例数据
SQL Server中的表
例如,用户在地址栏中输入了汉字,长度为10,
Oracle表
此处未插入地址,因为地址长度超过12,在oracle特殊字符中被视为3长度。
我想对字符进行字符串化(使用非英语和英语)。我该如何实现?我写了写特殊字符数的功能。
如何仅从@nstring获得5个角色
答案 0 :(得分:1)
尝试将Oracle中的列定义为VARCHAR2(10 CHAR)
。这将长度语义从字节更改为字符。因此,该列将能够接受10个字符而不仅仅是10个字节,如果字符串中包含特殊字符,这可能会缩短。
答案 1 :(得分:0)
declare @nstring NVARCHAR(MAX)=N'理,551'
declare @lenSQL int = len(@nstring)
declare @oracleLen int = @lenSQL +(2 * [dbo].[CountNonEnglishfromString](@nstring))
declare @OracleMaxLen int = 5; -- change as per len required
declare @newString nvarchar(max);
if(@OracleMaxLen < @oracleLen)
begin
declare @olen int =0
declare @count int =1;
WHILE ( @count <= @lenSQL)
BEGIN
declare @ch nvarchar(1) =(SELECT SUBSTRING(@nstring,@count,@count) AS ExtractString);
declare @isSpecialChar int = [dbo].[CountNonEnglishfromString](@ch)
if(@isSpecialChar = 1)
begin
set @olen = @olen+3;
end
else
begin
set @olen = @olen+1;
end
if(@OracleMaxLen < @olen)
begin
break
end
set @newString =CONCAT(@newString , @ch)
set @count = @count +1
End
End
else
begin
set @newString = @nstring
end
select isnull(@newString,'') as 'new string';