T / SQL - 字符串操作

时间:2013-11-12 17:35:15

标签: sql sql-server sql-server-2008 tsql

我有以下查询。

SQLFiddle

我只能有7个字符( - 和A-Z组合)

前5个字符(周一至周五)只能有一个“ - ” 对于周六和周日,我们只能有一个角色或破折号  我正在用S

取代Sa和Su

然而,每当他们在星期六和/或星期日以两个短划线传球时,我需要用每个短划线替换它们

所有操作后长度只能为7。

我试过w / e我可以但是在星期六/星期日的位置遇到两个与一个短跑的情况。

请帮忙!我会在发现更多内容后随时更新。

ADV中的THX

代码:

CREATE Table TempTable (string varchar(50))

INSERT INTO TempTable (string)
VALUES ('MTWRFSS')
       ,('MTWRFSaS')
       ,('MTWRFSaSu')
       ,('----F--')
       ,('----F----')
       ,('MT------')
       ,('MT------')
       ,('----FSa--')
       ,('----FSa-')
       ,('----FS--')
       ,('----FS-')
       ,('----F-Su')
       ,('----F--Su')
       ,('----F-S')
       ,('----F--S')

UPDATE TempTable
SET string =  REPLACE(REPLACE(RTRIM(LTRIM(string)),'SA','S'),'SU','S')

SELECT string 
       ,LEN(String) AS stringLengh FROM TempTable

--DROP TABLE TempTable

1 个答案:

答案 0 :(得分:2)

尝试在5号之后仅操纵字符,因为从MON到FRY,你总是有1 - 。 所以我认为这会奏效:

SELECT 
  string as InitialString
  ,LEFT(LEFT(String,5) + replace(replace(replace(RIGHT(String,LEN(String)-5),
  'Sa','S'),'Su','S'),'--','-') + '--',7) as FinalString
FROM TempTable;

你必须把字符串分成2:左边5和其余部分。然后使用几个替换,你可以有正确的Sat / Sun组合。连接两者,你将有最终的决定。 此外,还需要添加两个短划线,您只需要LEFT 7,因为如果您有'--',则会被'-'替换。