如何截取SQL字段中除汉字外的字符,主要问题是字符位数不确定。

晋云 2018-11-14 12:07:24
如何截取SQL字段中除汉字外的字符,主要问题是字符位数不确定。但需要截取的字符都在前面
如下图:

...全文
153 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
晋云 2018-11-14
  • 打赏
  • 举报
回复
666,太感谢
吉普赛的歌 2018-11-14
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
	DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
ID INT,
[订单号] NVARCHAR(MAX)
,[颜色] NVARCHAR(MAX)
,[尺码] NVARCHAR(MAX)
,[数星] NVARCHAR(MAX)	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(1,N'A-001女式圈领衬',N'黑色',N'M',N'10')
INSERT INTO dbo.[t] VALUES(2,N'8890男式方领衬',N'白色',N'M',N'20')
INSERT INTO dbo.[t] VALUES(3,N'8801.2男童',N'黑色',N'L',N'30')
GO
IF OBJECT_ID('Fun_GetOnlyAscii') IS NOT NULL
DROP FUNCTION Fun_GetOnlyAscii
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date, ,>
-- Description:	<Description, ,>
-- =============================================
CREATE FUNCTION dbo.Fun_GetOnlyAscii 
(
	@str NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
	IF ISNULL(@str,'')=''
		RETURN @str;
	
	DECLARE @r NVARCHAR(MAX)
	DECLARE @singleChar CHAR(1),@idx INT
	SET @idx=1

	WHILE @idx<=LEN(@str)
	BEGIN
		SET @singleChar=SUBSTRING(@str,@idx,1)
		IF ASCII(@singleChar) BETWEEN 0 AND 127
		BEGIN
			SET @r=ISNULL(@r,'')+@singleChar
		END
		ELSE IF unicode(@singleChar) between 19968 And 40869
		BEGIN
			BREAK;
		END
		SET @idx=@idx+1;
	END 

	RETURN @r;
END
GO
SELECT 
ID
,[订单号]
,dbo.Fun_GetOnlyAscii([订单号]) AS [result] 
FROM t

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧