【问题标题】:How to split columns on basis of length如何根据长度拆分列
【发布时间】:2019-10-04 22:38:05
【问题描述】:

我有一个 10 列的表,如果列值的长度为 4,我想将一列拆分为两列,否则不拆分,其余值应进入第一个拆分列。

column  Acolumn Bcolumn C

0000    00      00
1111   
1 1
000     000 
0115    01      15

【问题讨论】:

    标签: sql ms-access sql-query-store


    【解决方案1】:

    您想在 MS Access 中有条件地做某事。这通常意味着IIF()SWITCH(),因为MS Access 不支持标准的CASE 表达式语法:

    select t.column,
           iif(len(column) = 4, left(column, 2), column) as columnA,
           iif(len(column) = 4, right(column, 2), NULL) as columnB
    from t;
    

    虽然我不推荐,但你也可以使用union all

    select t.column, t.column as columnA, NULL as columnB
    from t
    where len(column) <> 4
    union all
    select t.column, left(t.column, 2) as columnA, right(t.column, 2) as columnB
    from t
    where len(column) = 4;
    

    【讨论】:

    • 这些方法在拆分后将三个或两个或单个数字字符串返回到第二列,这不应该这样做......如果长度 4,则数字应该在拆分后仅复制第一列的两个.. ..
    • @nitisethi。 . .固定的。当然,您不希望在这种情况下重复该值。
    • 值应该在 A 列而不是 B 列中重复......但对于上述两个代码,它在 A 列和 B 列中都重复
    • @nitisethi。 . .我确定了答案。您指的是较新的代码吗?
    【解决方案2】:

    你可以试试下面-

    select columnA, 
           case when len(columnA)=4 then left(columnA,2) end as columnB,
           case when len(columnA)=4 then mid(ColumnA,3,2) end as columnC
    from tablename 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 2021-10-03
      • 1970-01-01
      • 2019-02-19
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      相关资源
      最近更新 更多