作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] 栏位内转换格式 (求概念)
时间Wed Aug 27 20:55:34 2014
※ 引述《MOONY135 (谈无慾)》之铭言:
: 只求概念 因为SAS SQL语法会稍微的不一样
: [问题叙述]:
: 格式大概长这样 想从资料库里面抓的学号格式改成常见的格式
: 学号 切成 不需要 A1 B1 C1
: 00280061 -> 00 28 00 61
: A1与B1转换成学号的格式是这样
: 00~09 -> 0~9 A~Z -> 10~36
: C1则是完全取用
: A1_TRANS B1_TRANC C1
: 所以这样转换後 28->S 00->0 61->61 合并起来之後
: 会变成S061
假如转换规则是固定的话,我应该会采用直接查表的写法,请参考看看:
use Lab
go
create table student (
id char(8),
)
go
insert into student values ('00280061');
go
declare @pool char(36) = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
select
substring(@pool, substring(id, 3, 2) + 1, 1) +
substring(@pool, substring(id, 5, 2) + 1, 1) +
substring(id, 7, 2)
from student
go
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.252.121.133
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1409144136.A.330.html
1F:→ MOONY135: 转换规则固定的 08/27 21:36
2F:→ MOONY135: 感谢您 我试试看 08/28 08:43
3F:→ MOONY135: substring(id, 3, 2)取出来会是 字串 28 而非数字 08/28 12:04
4F:→ MOONY135: 请问要怎样处理? 08/28 12:04
5F:推 GoalBased: 用字串比对不行吗? 为何要用数字 08/28 12:18
6F:→ TeemingVoid: 在我写的T-SQL例子,substring() + 1 就会自动转型 08/28 14:04
7F:→ TeemingVoid: 成整数,若要手动转换,T-SQL呼叫 Convert() 函数。 08/28 14:04
8F:→ TeemingVoid: SAS SQL 我没在用,要麻烦请M大查一下 SAS SQL 要 08/28 14:04
9F:→ TeemingVoid: 怎麽进行型别转换。 08/28 14:05
10F:→ smlboby: MSSQL用charindex/Oracle用instr 找字串起始位置 08/28 14:51
11F:→ TeemingVoid: 楼上说的没错。而M大原问的是已知数码,要查代码。 08/28 15:01
12F:推 MOONY135: 喔喔 所以要型别转换 因为我刚摸SQL... 08/28 21:03
13F:→ MOONY135: 不过我忘记说 我的学号是文字格式... 08/28 21:04
14F:→ MOONY135: 学号要是数字格式才能这样做吗? 08/28 21:04
15F:→ MOONY135: 学号代码(字串格式) -> 学号(字串) 还是我一开始就想 08/28 21:05
16F:→ MOONY135: 错格式了? 08/28 21:05
没错啊! 学号是文字型态, 转换之後, 还是文字型态。
OK,我再写仔细一些 :-)
-- Part A,从第3个位置起,取两个字元,得到字串 '28'
substring('00280061', 3, 2) ==> '28'
-- 接下来,查表转成 'S' (从第28个位置起,取一个字元):
substring('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '28' + 1, 1)
-- 123456789012345678901234567890123456789
-- 1 2 ^ 3
问题是,字串'28'可以加一吗? T-SQL在这个例子会自动帮忙型别转换:
-- 29
select '28' + 1
若要自己转,自然也行:
-- 还是 29
select convert(int, '28') + 1
您使用的是 SAS SQL,会不会自动转换型别以及该怎麽进行型别转换,
就有劳您再查查。 :-)
※ 编辑: TeemingVoid (114.41.97.192), 08/28/2014 21:34:12
17F:→ MOONY135: 非常感谢您的热心回答 08/28 21:44
18F:→ MOONY135: 接触到SQL之後才知道原来这麽好用.. 08/28 21:45