首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SUBSTRING和IF语句

SUBSTRING和IF语句
EN

Database Administration用户
提问于 2018-08-21 04:45:45
回答 2查看 407关注 0票数 1

我有varchar列,它的名字是column1,有像111232435-01123443530这样的记录。最后一个数字并不总是0;它可以是0-9

其中一些是带(-)的数字,另一些是数字。我想将数字改为(-)的数字。

例如:1123443530 ->改为-> 112344353-0

伪码:

代码语言:javascript
复制
if record just be digit just update in column3
else
the last digit separate by (-)
and then record update in column3

在Server 2012中,并将此新记录和记录(-)放在新列中。

我该怎么办?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-08-21 08:11:13

另一种选择是使用料子函数。

代码语言:javascript
复制
IF OBJECT_ID('tempdb..#ExampleValues') IS NOT NULL
    DROP TABLE #ExampleValues

CREATE TABLE #ExampleValues (
    ExampleValue VARCHAR(100), 
    UpdatedValue VARCHAR(100))

INSERT INTO #ExampleValues (ExampleValue)
VALUES
    ('112344353-0'),
    ('11443-8'),
    ('112344-9'),
    ('11234435348'),
    ('11234448712')

UPDATE T SET
    UpdatedValue = CASE 
        WHEN T.ExampleValue NOT LIKE '%-%'  -- If the literal does not contain a hyphen
            THEN STUFF(
                T.ExampleValue,             -- Put in the literal
                LEN(T.ExampleValue),        -- Just before the last character
                0,                          -- While replacing 0 characters ("stuffing" in between)
                '-')                        -- Place a hypen!
        ELSE
            T.ExampleValue END
FROM
    #ExampleValues AS T

SELECT
    T.ExampleValue,
    T.UpdatedValue
FROM
    #ExampleValues AS T

结果:

代码语言:javascript
复制
ExampleValue    UpdatedValue
112344353-0     112344353-0
11443-8         11443-8
112344-9        112344-9
11234435348     1123443534-8
11234448712     1123444871-2
票数 4
EN

Database Administration用户

发布于 2018-08-21 05:00:49

这是你要找的东西吗?

代码语言:javascript
复制
DECLARE @table TABLE(varname      VARCHAR(255),
                     newvarname   VARCHAR(255)
                    ); 

INSERT INTO @table
SELECT '111232435-0',NULL
UNION ALL
SELECT '1123443530',NULL;

UPDATE @table
   SET 
       newvarname = CASE
                       WHEN varname NOT LIKE '%-%' THEN 
                       LEFT(varname,LEN(varname)-1)+'-'+RIGHT(varname,1)
                       ELSE varname
                    END;


SELECT *
  FROM @table;

根据上述逻辑,您可以创建update语句。

如果最后一个数字可以是任意数字,则编辑1更新代码,并假设我们只需要更改没有分隔器-的列

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/215440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档