我的varchar
表中有一个SQL
列,其格式如下:
查询表时,我需要更改此格式,以使其显示为以下格式:
您会注意到,新格式已删除了两个前导零。
我已经尝试使用以下方法进行此操作:
RIGHT(ColumnName, 4) AS NewColumnFormat
SUBSTRING(ColumnName, 3, 4) AS NewColumnFormat
但是当我将其应用于诸如 000010 的数字时,它显示为 0001 ,而将诸如 000001 的数字显示为 0000 等。
以下是我一直在使用的查询:
SELECT DISTINCT TOP 1000
SUBSTRING(H.EMPREF, 3, 4) AS NewColumnFormat
,(SELECT TOP 1 CASE WHEN H1.[NEWVALUE] = 'E' THEN 'Employee' ELSE H1.[NEWVALUE] END FROM [HISTORY] H1 WHERE H1.[FIELDNAME] = 'EMPTYPE' AND H.[EMPREF] = H1.[EMPREF] ORDER BY H1.CHANGEDATE DESC) AS EMPTYPE
,(SELECT TOP 1 H2.[NEWVALUE] FROM [HISTORY] H2 WHERE H2.[FIELDNAME] = 'TITLE' AND H.[EMPREF] = H2.[EMPREF] ORDER BY H2.CHANGEDATE DESC) AS TITLE
,(SELECT TOP 1 H3.[NEWVALUE] FROM [HISTORY] H3 WHERE H3.[FIELDNAME] = 'FIRSTNAMES' AND H.[EMPREF] = H3.[EMPREF] ORDER BY H3.CHANGEDATE DESC) AS FIRSTNAMES
,(SELECT TOP 1 H4.[NEWVALUE] FROM [HISTORY] H4 WHERE H4.[FIELDNAME] = 'SURNAME' AND H.[EMPREF] = H4.[EMPREF] ORDER BY H4.CHANGEDATE DESC) AS SURNAME
,(SELECT TOP 1 H5.[NEWVALUE] FROM [HISTORY] H5 WHERE H5.[FIELDNAME] = 'DEPARTMENT' AND H.[EMPREF] = H5.[EMPREF] ORDER BY H5.CHANGEDATE DESC) AS DEPARTMENT
,(SELECT TOP 1 H6.[NEWVALUE] FROM [HISTORY] H6 WHERE H6.[FIELDNAME] = 'SECTIONMGR' AND H.[EMPREF] = H6.[EMPREF] ORDER BY H6.CHANGEDATE DESC) AS SECTIONMGR
,(SELECT TOP 1 H7.[NEWVALUE] FROM [HISTORY] H7 WHERE H7.[FIELDNAME] = 'HR2' AND H.[EMPREF] = H7.[EMPREF] ORDER BY H7.CHANGEDATE DESC) AS HR2
,(SELECT TOP 1 H9.[NEWVALUE] FROM [HISTORY] H9 WHERE H9.[FIELDNAME] = 'JOBTITLE' AND H.[EMPREF] = H9.[EMPREF] ORDER BY H9.CHANGEDATE DESC) AS JOBTITLE
FROM
[HISTORY] H
WHERE (H.TABLENAME = 'EMP' OR H.TABLENAME = 'OD' OR H.TABLENAME = 'SMS' OR H.TABLENAME = 'JD')
ORDER BY NewColumnFormat
我得到以下输出:
+-----------------+----------+-------+------------+---------+------------+------------+------+----------+
| NewColumnFormat | EMPTYPE | TITLE | FIRSTNAMES | SURNAME | DEPARTMENT | SECTIONMGR | HR2 | JOBTITLE |
+-----------------+----------+-------+------------+---------+------------+------------+------+----------+
| 0000 | Employee | Mr | Test | Record | LB | | NULL | |
| 0001 | Employee | Mr | Test | Record | AB | | NULL | |
| 0002 | Employee | Mr | Test | Record | LB | | NULL | |
| 0003 | Employee | Mr | Test | Record | LB | | NULL | |
| 0004 | Employee | Mr | Test | Record | BO | | NULL | |
| 0005 | Employee | Mr | Test | Record | BO | | NULL | |
| 0006 | Employee | Mr | Test | Record | AB | | NULL | |
| 0007 | Employee | Mr | Test | Record | RET | | NULL | |
| 0008 | Employee | Mr | Test | Record | DES | | NULL | |
+-----------------+----------+-------+------------+---------+------------+------------+------+----------+
“ NewColumnFormat”的格式显示不正确的地方在哪里呢?
答案 0 :(得分:2)
SELECT FORMAT(12, '0000') as pad_to_4
--> 0012
SELECT FORMAT(CONVERT(INT, '12'), '0000') as pad_to_4
--> 0012
SELECT FORMAT(CONVERT(INT, '000012'), '0000') as pad_to_4
--> 0012
大于4的数字保持原样(或丢失前导零):
SELECT FORMAT(CONVERT(INT, '123456'), '0000') as pad_to_4
--> 123456
SELECT FORMAT(CONVERT(INT, '00123456'), '0000') as pad_to_4
--> 123456
但是,当我将其应用于000010之类的数字时,它显示为0001,而像000001之类的数字则显示为0000,依此类推。
顺便说一下,我无法复制您的投诉:
SELECT RIGHT('000010', 4) AS NewColumnFormat
--> 0010
SELECT SUBSTRING('000010', 3, 4) AS NewColumnFormat
--> 0010
这让我认为基本问题是EMPREF所涉及的问题,而不是您所想的。
答案 1 :(得分:0)
更新MyTable SET ColumnName = RIGHT(ColumnName,LEN(ColumnName)-2);
请让我知道您的结果。谢谢。
答案 2 :(得分:0)
SELECT LPAD (0000012,4,0)
--> 0012