sql 中文字符串补足的问题

zwk_9 2011-11-10 07:30:51
表里面的数据是这样的:
1 A 三轮 1.0 次 NULL
2 B 货的(皮卡) 2.0 次 NULL
4 C 拖拉机 3.0 次 NULL
5 D 箱式车 5.0 次 NULL
6 E 中卡车 10.0 次 NULL
7 F 大卡车 15.0 次 NULL
8 G 集装箱(后四轮) 20.0 次 NULL
9 H 大型集装箱(后八轮) 30.0 次 NULL
10 I 手拉车 0.0 次 NULL

我实现这么一个查询:
select Id, left(Flag + replicate(' ', 5), 5) + left(CarTypeName + replicate(' ', 15), 15)
+ CarTypeMoney + '/' + StopTime
as CarType from CarTypeTBL

结果是这样的:
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/次

我希望这里的最后一列能对对齐,有什么好办法么?
...全文
161 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
koumingjie 2011-11-10
  • 打赏
  • 举报
回复



--全角转半角
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 行受影响)





koumingjie 2011-11-10
  • 打赏
  • 举报
回复



--全角转半角
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 行受影响)



zwk_9 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bzcode 的回复:]
结果显示在表格里不就好了吗?
[/Quote]
我要把结果显示在c#的combobox里面,只能绑定一个字段的
--小F-- 2011-11-10
  • 打赏
  • 举报
回复
对齐成什么样子的?
大蛮 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bzcode 的回复:]
结果显示在表格里不就好了吗?
[/Quote]
94
koumingjie 2011-11-10
  • 打赏
  • 举报
回复
应该是半角‘(’,‘)’影响的
bzcode 2011-11-10
  • 打赏
  • 举报
回复
结果显示在表格里不就好了吗?
koumingjie 2011-11-10
  • 打赏
  • 举报
回复
select Id, left(Flag + replicate(CHAR(9), 5), 5) + left(CarTypeName + replicate(' ', 50), 30)
+ CarTypeMoney + '/' + StopTime
as CarType from tb

1,将CarTypeName字段中的值转换成全角
2、replicate中换成全角空格
Mr_Nice 2011-11-10
  • 打赏
  • 举报
回复

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/次
*/


???
koumingjie 2011-11-10
  • 打赏
  • 举报
回复
将 ''换成char(9)试试
Mr_Nice 2011-11-10
  • 打赏
  • 举报
回复
怎么个对齐法?

1.0/次
15.0/次

??
koumingjie 2011-11-10
  • 打赏
  • 举报
回复
没明白什么意思?什么叫最后一列能对对齐
ORACLE PL/SQL 字符串函数、数学函数、日期函数 --【字符串函数】 --字符串截取substr(字段名,起始点,个数) select Name,substr(Name,2,4),substr(Name,0,3),substr(Name,-2,3),substr(Name,-2,1) from t1; --字符串从前面取三个(0开始) select Name,substr(Name,0,3) from t1; --字符串从后面取三个 select Name,substr(Name,-3,3),length(Name) 串长度 from t1; SELECT ASCII('A'),ASCII('B') from dual; select CHR(100),CHR(80) from dual; select CONCAT(CHR(65),CONCAT(CHR(67),CHR(98))) from dual; select CHR(65)||CHR(66)||CHR(76) from dual; --将每个单词的第一个字母大写其它字母小写返回。 select INITCAP('substr,abc,substring') from dual; --返回i在MISSISSIPPI中第3次出现的位置, select INSTR('Mississippi','i',5,3) from dual; select INSTR('Mississippi','i',-2,3) from dual; --返回的是字节 select INSTRB('Mississippi','i',5,3) from dual; select INSTRB('Mississippi','i',-2,3) from dual; --长度 select length('WHO ARE YOU') from dual; select nvl(null,'空') from dual; --小写 select lower('WHo are You') from dual; --LPAD左侧用字符串补足到一定长度 select LPAD('DFSDf................',9,'WHO') from dual; select LPAD('DFSD',9,'WHO') from dual; select LPAD('DFSD',9,'') from dual; select LPAD('DFSD',length('DFSD')+length('WHO......'),'WHO......') from dual; --把最左边的字符去掉,使其第一个字符不在其中 select ltrim('Mississippi','Mis') from dual; select ltrim('Mississippi','miD') from dual; --RPAD右侧用字符串补足到一定长度 select RPAD('DFSDf................',9,'WHO') from dual; select RPAD('DFSD',9,'WHO') from dual; select RPAD('DFSD',9,'') from dual; . . . . . . .
ORACLE数据库智能化管理系统2012 软件介绍 序言 ORACLE数据库管理们: 你们还在为处理日常大量数据,天天写过多的SQL语句而烦恼吗? 还在为由于没有面面具到的软件来汇制想要的日常数据报表而烦恼吗? 还在为查找帐务不平的数据或数据重复,而不知是哪些数据错误或重复,造成不能继续操作,而费时费力手工查找问题所在而烦恼吗? 还在为数据要多字段大批量处理或指定满足过多条件,处理成特定数据而手工劳动烦恼吗? 还在为两表数据多字段相关联,要批量修改其一表多字段数据成另一表数据值,而不知怎样做而烦恼吗? 还在为查找数据库安全情况,不知权限分配情况如何?查起来又费时费力,而烦恼吗? 还在为数据库安全情况,表或角色权限批量授权或撤权,操作起来又费时费力,而烦恼吗? 还在为需要多表数据综合计算才能求得到想要的数据结果,而书写SQL语句书写起来复杂而烦恼吗? 还在为达到求某种数据值需要多表数据关联起来后得到结果重复,想去除多余行值,单独书写的SQL语句又无法解决而频繁手工操作或通过编写软件才能实现想要的结果而烦恼吗? 还在为查看数据库会话情况及死锁情况,想批量处理这些死锁及断开不必要空闲会话,一一处理而手功劳动吗? 还在为日常数据处理分析,从查询结果中,求出可自定任意选择行及数字型字段数据求合,而手工一行行、一列列累加求和吗? 还在为某种数据不同类别所占总数比例及各多少?而手工累加一一计算吗?本系统使用了ABC方法计算得出结果。 查询数据条件参数,智能化表字典辅助批量字段输入功能,使您的工作简单而更加轻松,用起来更加顺手。 查询或导入的数据结果智能化创建计算字段和行列分类合计,从而进一步使结果数据更加理想化,省去了您宝贵的数据计算时间。 智能化SQL历史语句保存和历史SQL智能注解查询功能,节省了您智能化重复创建和查询SQL语句的时间,提高了您的工作效率。 数据库状态及运行情况综合查看,使您了解ORACLE运行状况及空间、日志归档、数据文件等使用情况更直观,并可智能生成数据库热备份脚本和备份恢复方案,为您的数据库保驾护航,使您高枕无忧。 本系统可执行SQL分组语句后,再对结果某值代码变为相对应名称,从而提高了数据库对SQL语句执行性能,减轻了因关联表太多查询,造成数据库性能下降带来的负担。 本系统可对执行SQL语句的结果集批量逐行处理多字段值一起做为检索条件,从它表中取出想要的多字段(值或计算结果)数据对相应的目标多字段进行赋值,从而简化了SQL语句书写难度,减少查询时间,提高了综合性能。 批量数据比较功能,增加了数字型字段4种(左右两边数据加减乘除)处理方式和4种行数据处理(左右两边互移或互复制行),可从数据源复合查询结果数据与目标数据进行运算,达到想要的结果等。 数据窗口右键菜单功能整合多种处理,功能强大,简单易操;重复数据可自动处理成唯一,也可自行处理;可自定义选择从查询结果集中的数行,进行数据求合及自定义图形项目分析;字段的10多种属性设置;数据窗口自创帮你省去建表才能进行数据处理的麻烦;各行数据在总数据所占的比例,一目了然,省去你一一计算。 生成可定义标准化数据代码;补足不足数据代码位数; 自由SQL语句查询参数多字段批量字典输入; 外部数据批量进行赋值处理; 数据列名可汉字后,导出成xls格式。 自由选择更新表数据方式,减少对数据库过多无关字段操作。 可根据查询结果自动生成IN、DECODE等多形式函数的参数,省去你查询手工输入上述函数多参数时的痛苦。 批量处理查询结果集中数据去除多余前后空格,增加对多字段字符串数据标准化,替换或去除数据中任意数据位数据,使其达到你想要的数据。 自动创建并可导出全数据库同义词创建语句,省去了你书写的麻烦。 您可以自由定制数据过滤、排序等条件、打印预览并可自动缩放到整张纸大小打印、打印数据行、列自己选定,打印设置自由灵活。 自动生成序列数据,切换数据库,无须退出系统。 人不在时,系统有锁定功能,防止别人动您数据! 您可以自动生成带分组小计的数据查询结果,使用你看的数据更加清晰。 分组查询条件SQL语句(带不带分组小计随您)智能化生成,只需您动几下鼠标就可完成。 交叉数据报表智能化生成,省去你为了一时的数据,而劳命伤财地去开发系统。 过程、触发器、表结构、同义词、视图、在线会话等查看一目了然。 给有关部分下达通知,消息框自动弹出。 。。。。。。。 本系统以智能化语句书写及批量处理数据及图形分析数据为特点,可以解决你的上述及未述后顾之忧,尽量把处理数据的主动权让给用户{本系统许多功能,只要你灵活运用,就可以得到意想不到的收获!},拥有了它,从此让你可以轻松、灵活对待日常数据库数据管理处理工作。 还等什么?赶快与我联系13856992267、QQ:23807773要求试用或购买吧?价格联系时谈! 本系统还可以根据用户需求,增加共性功能。{感谢您的支持及来电来函提出您的宝贵建议,为本系统更加地完善,贡献出您的一份力量!}

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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