Re: [SQL ] 字段内转换格式 (求概念)

楼主: TeemingVoid (TeemingVoid)   2014-08-27 20:55:34
※ 引述《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
作者: MOONY135 (谈无欲)   2014-08-27 21:36:00
转换规则固定的感谢您 我试试看substring(id, 3, 2)取出来会是 字串 28 而非数字请问要怎样处理?
作者: GoalBased (Artificail Intelligence)   2014-08-28 12:18:00
用字串比对不行吗? 为何要用数字
楼主: TeemingVoid (TeemingVoid)   2014-08-28 14:04:00
在我写的T-SQL例子,substring() + 1 就会自动转型成整数,若要手动转换,T-SQL呼叫 Covert() 函数。SAS SQL 我没在用,要麻烦请M大查一下 SAS SQL 要怎么进行型别转换。
作者: smlboby (波比)   2014-08-28 14:51:00
MSSQL用charindex/Oracle用instr 找字串起始位置
楼主: TeemingVoid (TeemingVoid)   2014-08-28 15:01:00
楼上说的没错。而M大原问的是已知数码,要查代码。
作者: MOONY135 (谈无欲)   2014-08-28 21:03:00
喔喔 所以要型别转换 因为我刚摸SQL...不过我忘记说 我的学号是文字格式...学号要是数字格式才能这样做吗?学号代码(字串格式) -> 学号(字串) 还是我一开始就想错格式了?非常感谢您的热心回答接触到SQL之后才知道原来这么好用..

Links booklink

Contact Us: admin [ a t ] ucptt.com