帮忙写个SQL语句

scxs 2015-08-28 01:06:49
如下图,我需要先排序日期(Sdate),然后再重建ID,以H00000001开头,不能用INT,只能用字符串类型
...全文
170 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-08-31
  • 打赏
  • 举报
回复
1)你的 pchshtchk.sheetid 长度为10啊!放到varchar(9)中少了一位,WHERE pchshtchk.sheetid = testdb.sheetid 就可能1对多了!
2) testdb.new_sheetid怎么做出12位编码的?
SELECT number rn,
'H'+RIGHT('00000000'+CONVERT(varchar(8),number),8) new_sheetid
FROM master..spt_values
WHERE type = 'p'
AND number BETWEEN 90 AND 110

         rn new_sheetid
----------- -----------------
90 H00000090
91 H00000091
92 H00000092
93 H00000093
94 H00000094
95 H00000095
96 H00000096
97 H00000097
98 H00000098
99 H00000099
100 H00000100
101 H00000101
102 H00000102
103 H00000103
104 H00000104
105 H00000105
106 H00000106
107 H00000107
108 H00000108
109 H00000109
110 H00000110

scxs 2015-08-29
  • 打赏
  • 举报
回复


order by sdate,new_id排序时出上图错误
scxs 2015-08-29
  • 打赏
  • 举报
回复
[quote=引用 3 楼 Tiger_Zhao 的回复:] CREATE TABLE testDB( rn int identity, sdate datetime, sheetid varchar(9), new_sheetid varchar(9) ) INSERT INTO testdb(sdate,sheetid) SELECT sdate, sheetid FROM pchshtchk ORDER BY sdate UPDATE testdb SET new_sheetid = 'H'+RIGHT('00000001'+CONVERT(varchar(8),rn),8) UPDATE pchshtchk SET pchshtchk.sheetid = testdb.new_sheetid FROM pchshtchk, testdb WHERE pchshtchk.sheetid = testdb.sheetid 服务器: 消息 8152,级别 16,状态 9,行 2 将截断字符串或二进制数据。 语句已终止。 (所影响的行数为 0 行) (所影响的行数为 0 行) (所影响的行数为 0 行)
Tiger_Zhao 2015-08-28
  • 打赏
  • 举报
回复
CREATE TABLE #T(
rn int identity,
sdate datetime,
old_id varchar(9),
new_id varchar(9)
)

INSERT INTO #t(sdate,old_id)
SELECT sdate, id
FROM table1
ORDER BY sdate

UPDATE #t
SET new_id = 'H'+RIGHT('00000008'+CONVERT(varchar(8),rn),8)

UPDATE table1
SET table1.ID = #t.new_id
FROM table1, #t
WHERE table1.ID = #t.old_id

记得先把ID上的主键/唯一约束去掉,更新后再重建。
scxs 2015-08-28
  • 打赏
  • 举报
回复
引用 1 楼 yooq_csdn 的回复:

select  'H'+ substring(cast(10000000+ ROW_NUMBER() OVER(order by Sdate)  as char(8)),2,7),Sdate
from t
order by Sdate
不好意思,忘记说明这个是SQL2000的,不支持ROW_number()函数
yooq_csdn 2015-08-28
  • 打赏
  • 举报
回复

select  'H'+ substring(cast(10000000+ ROW_NUMBER() OVER(order by Sdate)  as char(8)),2,7),Sdate
from t
order by Sdate

27,579

社区成员

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

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