sql - T/SQL - 字符串操作

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

我有以下查询。

SQLFiddle

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

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

但是,每当他们在星期六和/或星期日传递两个破折号时,我需要将它们分别替换为一个破折号

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

我尽我所能尝试了周六/周日位置的二对一破折号场景。

求助!当我发现更多信息时,我会保持更新。

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

最佳答案

尝试只操作 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 个破折号,并且您只需要 LEFT 7,因为如果您有 '--' 它将被替换为 '- '.

关于sql - T/SQL - 字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936048/

相关文章:

mysql - SQL好友列表查询

mysql - 数据库表设计问题

具有动态生成列和聚合函数的 SQL Pivot

sql-server - 在存储过程中的截断表上发生错误

SQL查询其中 'IN'充当 'AND'而不是 'OR'?

mysql - 如何在MYSQL中按公司对员工进行分组

sql - 使用连接等价查询?

c# - 使用 Windows 身份验证的 NHibernate 模拟

sql - 不使用 ARRAY[] 的嵌套复合类型数组的语法

sql - 使用逗号分隔符拆分列