3

我有以下查询。

SQLFiddle

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

前 5 个字符只能有一个“-”(周一到周五) 对于周六和周日,我们只能有一个字符或破折号 我将 Sa 和 Su 替换为 S

但是,每当他们在周六和/或周日传递两个破折号时,我需要用每个破折号替换它们

所以在所有操作之后长度只能是 7。

我已经尝试过,但在周六/周日的位置上陷入了二对一的短跑场景。

请帮忙!当我发现更多时,我会保持更新。

THX 在 ADV

代码:

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
4

1 回答 1

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 和其余部分。然后使用几个替换你可以有正确的周六/周日组合。将两者连接起来,您将拥有最终决定权。此外,还必须添加 2 个破折号,而您只需要LEFT7 个,因为如果有'--',它将被替换为'-'.

于 2013-11-12T18:01:39.070 回答