在更新中使用空格填充列值

时间:2017-11-09 22:56:59

标签: sql-server sql-server-2012 spaces nvarchar

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

我有一个包含多个列的表,如

NULL or ''

等等。

如果列的值为NULL or '',我将带有空格的列更新为预定长度(列的长度)。

对于Col3,如果值为' ',则空格为200个空格('abcd') 如果值有任何字符1) Value = NULL , Col1 value = ' ' (10 spaces) 2) Value = '' , Col1 value = ' ' (10 spaces) 2) Value = 'abc' , Col1 value = 'abc ' (abc and 7 spaces) ,则填充(右键)到200个空格。然后,最后4个不是空格字符和196个空格字符。

例如,Col1的长度为10。

select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'

如何在UPDATE SQL中执行此操作?

也许正在使用

SELECT COL_LENGTH('Table', 'Column')

<form action="login.php" method="post" id="clientLogin" onsubmit="return C1heckFields()">
<!--?php csrf_token(); ?-->
<strong></strong>
<br>

<div>
    <label for="email">Логин:</label>
<input id="myl" type="text" name="login" size="16" value="">
</div>

<div>
    <label for="ticketno">Пароль:</label>
    <input id="ticketno" type="password" name="password" size="16" value="">
</div>
<p>
    <input class="btn" type="submit" value="Войти">
</p>  
</form>

How to get the size of a varchar[n] field in one SQL statement?

中的更多内容

2 个答案:

答案 0 :(得分:3)

尝试以下操作,LEFT用于将长度保持为列长度,而空间确保字段填充空格:

create table test (col1 varchar(10), col2 varchar(15))
GO

insert into test (col1, col2)
    values   ('', '')
            ,(NULL, NULL)
            ,('abc', 'abc')

UPDATE test
    SET  col1 = LEFT(COALESCE(col1, '') + SPACE(COL_LENGTH('test', 'col1')), COL_LENGTH('test', 'col1'))
        ,col2 = LEFT(COALESCE(col2, '') + SPACE(COL_LENGTH('test', 'col2')), COL_LENGTH('test', 'col2'))
FROM    test

SELECT  *
FROM    test

答案 1 :(得分:1)

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

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;

<强> Demo

更新

以下是如何在一个声明中执行此操作:

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);

<强> Demo