22,210
社区成员
发帖
与我相关
我的任务
分享
--全角转半角
Create FUNCTION [dbo].[f_Convert](
@str NVARCHAR(4000), --要转换的字符串
@flag bit --转换标志,0转换成半角,1转换成全角
)RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @pat nvarchar(8),@step int,@i int,@spc int
IF @flag=0
SELECT @pat=N'%[!-~]%',@step=-65248,
@str=REPLACE(@str,N' ',N' ')
ELSE
SELECT @pat=N'%[!-~]%',@step=65248,
@str=REPLACE(@str,N' ',N' ')
SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
WHILE @i>0
SELECT @str=REPLACE(@str,
SUBSTRING(@str,@i,1),
NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
RETURN(@str)
END
go
--创建表
create table tb
(id int,
Flag varchar(2),
CarTypeName nvarchar(15),
CarTypeMoney varchar(6),
StopTime Nvarchar(1)
)
--测试数据
insert into tb
select 1,'A' ,'三轮', '1.0', '次' union all
select 2,'B' ,'货的(皮卡)', '2.0', '次' union all
select 4, 'C', '拖拉机', '3.0', '次' union all
select 5, 'D', '箱式车', '5.0', '次' union all
select 6, 'E', '中卡车', '10.0', '次' union all
select 7, 'F', '大卡车', '15.0', '次' union all
select 8, 'G', '集装箱(后四轮)', '20.0', '次' union all
select 9 ,'H','大型集装箱(后八轮)', '30.0', '次' union all
select 10, 'I', '手拉车', '0.0', '次'
--注意第一个为半角' ' ,第二个问全角' '
select Id, left(Flag + replicate(' ', 5), 5) + left([dbo].[f_Convert](CarTypeName,1) + replicate(' ', 15), 15)
+ CarTypeMoney + '/' + StopTime
as CarType from tb
--结果
Id CarType
----------- ------------------------------
1 A 三轮 1.0/次
2 B 货的(皮卡) 2.0/次
4 C 拖拉机 3.0/次
5 D 箱式车 5.0/次
6 E 中卡车 10.0/次
7 F 大卡车 15.0/次
8 G 集装箱(后四轮) 20.0/次
9 H 大型集装箱(后八轮) 30.0/次
10 I 手拉车 0.0/次
(9 行受影响)
--全角转半角
Create FUNCTION [dbo].[f_Convert](
@str NVARCHAR(4000), --要转换的字符串
@flag bit --转换标志,0转换成半角,1转换成全角
)RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @pat nvarchar(8),@step int,@i int,@spc int
IF @flag=0
SELECT @pat=N'%[!-~]%',@step=-65248,
@str=REPLACE(@str,N' ',N' ')
ELSE
SELECT @pat=N'%[!-~]%',@step=65248,
@str=REPLACE(@str,N' ',N' ')
SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
WHILE @i>0
SELECT @str=REPLACE(@str,
SUBSTRING(@str,@i,1),
NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
RETURN(@str)
END
go
create table tb
(id int,
Flag varchar(2),
CarTypeName nvarchar(15),
CarTypeMoney varchar(6),
StopTime Nvarchar(1)
)
insert into tb
select 1,'A' ,'三轮', '1.0', '次' union all
select 2,'B' ,'货的(皮卡)', '2.0', '次' union all
select 4, 'C', '拖拉机', '3.0', '次' union all
select 5, 'D', '箱式车', '5.0', '次' union all
select 6, 'E', '中卡车', '10.0', '次' union all
select 7, 'F', '大卡车', '15.0', '次' union all
select 8, 'G', '集装箱(后四轮)', '20.0', '次' union all
select 9 ,'H','大型集装箱(后八轮)', '30.0', '次' union all
select 10, 'I', '手拉车', '0.0', '次'
select Id, left(Flag + replicate(CHAR(9), 5), 5) + left([dbo].[f_Convert](CarTypeName,1) + replicate(' ', 15), 15)
+ CarTypeMoney + '/' + StopTime
as CarType from tb
Id CarType
----------- ------------------------------
1 A 三轮 1.0/次
2 B 货的(皮卡) 2.0/次
4 C 拖拉机 3.0/次
5 D 箱式车 5.0/次
6 E 中卡车 10.0/次
7 F 大卡车 15.0/次
8 G 集装箱(后四轮) 20.0/次
9 H 大型集装箱(后八轮) 30.0/次
10 I 手拉车 0.0/次
(9 行受影响)
DECLARE @table TABLE(cartypemoney VARCHAR(10),stoptime VARCHAR(10))
INSERT INTO @table
SELECT '1.0','次'
UNION ALL
SELECT '15.0','次'
UNION ALL
SELECT '8.0','次'
SELECT REVERSE(CONVERT(VARCHAR(10),REVERSE(CarTypeMoney + '/' + StopTime)+SPACE(10)))
FROM @table
/*
(3 行受影响)
----------
1.0/次
15.0/次
8.0/次
*/