首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用空格填充更新中的列值

用空格填充更新中的列值
EN

Stack Overflow用户
提问于 2017-11-09 22:56:59
回答 2查看 3.7K关注 0票数 0

如何在 Server 2012中用空格自动填充更新SQL语句中预先确定的长度

我有一个有几个列的表

代码语言:javascript
运行
复制
Col1 NVARCHAR(10)
Col2 NVARCHAR(100)
Col3 NVARCHAR(200)
Col4 NVARCHAR(50) 

还有更多。

如果列的值为NULL or '',则使用空格将列更新为预先确定的长度(列的长度)。

对于Col3,如果值为NULL or '',空格为200空白(' '),如果值有任何字符,则为'abcd',填充(垫右)为200个空白。最后,4个非空格字符和196个空格字符。

例如,对于Col1的长度为10。

代码语言:javascript
运行
复制
1) Value = NULL    , Col1 value = '         ' (10 spaces)
2) Value = ''      , Col1 value = '         ' (10 spaces)
2) Value = 'abc'   , Col1 value = 'abc      ' (abc and 7 spaces)

如何在UPDATE SQL中做到这一点?

也许用

代码语言:javascript
运行
复制
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'

代码语言:javascript
运行
复制
SELECT COL_LENGTH('Table', 'Column')

关于如何在一个SQL语句中获取varchar[n]字段的大小?的更多信息

EN

Stack Overflow用户

发布于 2017-11-09 23:31:39

我不明白你到底想要什么,但我理解的是:

代码语言:javascript
运行
复制
CREATE TABLE MyTable (
    Col1 NVARCHAR(200),
    Col2 NVARCHAR(100),
    Col3 NVARCHAR(200),
    Col4 NVARCHAR(50)
    );
    INSERT INTO MyTable VALUES (NULL, NULL, NULL, NULL), ('ABC', NULL, NULL, NULL);
-- You can do the same for the other cols
        UPDATE MyTABLE 
        SET Col1 = REPLICATE(' ', COL_LENGTH('MyTable', 'Col1')/2)
        WHERE Col1 IS NULL;

SELECT *
FROM MyTable;

演示

更新:

下面是如何在一条语句中这样做:

代码语言:javascript
运行
复制
UPDATE MyTABLE 
SET Col1 = (SELECT CASE WHEN (Col1 IS NULL) OR (Col1 = '') THEN 
                REPLICATE(' ', COL_LENGTH('MyTable', 'Col1')/2) 
                ELSE Col1 + REPLICATE(' ', (COL_LENGTH('MyTable', 'Col1')/2)- LEN(Col1)) END),
Col2 = (SELECT CASE WHEN (Col2 IS NULL) OR (Col2 = '') THEN 
                REPLICATE(' ', COL_LENGTH('MyTable', 'Col2')/2) 
                ELSE Col2 + REPLICATE(' ', (COL_LENGTH('MyTable', 'Col2')/2)- LEN(Col2)) END),                
Col3 = (SELECT CASE WHEN (Col3 IS NULL) OR (Col3 = '') THEN 
                REPLICATE(' ', COL_LENGTH('MyTable', 'Col1')/2) 
                ELSE Col3 + REPLICATE(' ', (COL_LENGTH('MyTable', 'Col3')/2)- LEN(Col3)) END), 
Col4 = (SELECT CASE WHEN (Col4 IS NULL) OR (Col4 = '') THEN 
                REPLICATE(' ', COL_LENGTH('MyTable', 'Col4')/2) 
                ELSE Col4 + REPLICATE(' ', (COL_LENGTH('MyTable', 'Col4')/2)- LEN(Col4)) END);

演示

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47213009

复制
相关文章

相似问题

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