【问题标题】:preserving leading spaces in strings in the database保留数据库中字符串中的前导空格
【发布时间】:2012-04-28 16:40:21
【问题描述】:

我想插入一个值为“abcd”的列

我正在使用 DB2 数据库。

我使用的查询是:

insert into mySchema.myTable value (' abcd');

但是,当我从表中取回值时,值前面的空格字符会自动修剪。

我用来取回该行的查询是:

select full_record from mySchema.myTable;

如何在数据库中保留这个前导空间?

【问题讨论】:

  • 第一个空格不应该被修剪,你的查询是什么来取回值?
  • 插入 mySchema.myTable 的值 (' '+' '+'abcd');或者使用 concat 函数。
  • (非 OP)我的 DB2 版本是 iSeries V6R1,它在 VARCHAR 字段上保留了前导和尾随空格。该手册似乎没有列出适用于这种情况的任何内容。但是,您为什么要尝试保留 leading 空间呢?这通常与显示相关,而不是要存储的东西。
  • 嗯,我的 db2 不支持“值”,它必须拼写为“值”。是您的错字,还是您使用的是不同的 db2?

标签: sql db2


【解决方案1】:

一切正常:

Database server        = DB2/SUN64 9.1.9

db2 => create table tt (a char (10), b varchar(10))
DB20000I  The SQL command completed successfully.
db2 => insert into tt values('a ', 'a '), (' b', ' b'), (' c ',' c '), ('d','d')
DB20000I  The SQL command completed successfully.

db2 => select a, b, length(a), length(b) from tt

A          B          3           4          
---------- ---------- ----------- -----------
a          a                   10           2
 b          b                  10           2
 c          c                  10           3
d          d                   10           1

  4 record(s) selected.

db2 => select '<'||a||'>', '<'||b||'>', length(a), length(b) from tt

1            2            3           4          
------------ ------------ ----------- -----------
<a         > <a >                  10           2
< b        > < b>                  10           2
< c        > < c >                 10           3
<d         > <d>                   10           1

  4 record(s) selected.

db2 => 

EDITH:这是预期的行为。 char() 是固定长度,varchar() 是可变长度(有最大值),所以 char() 的长度是恒定的。必须保留前导空格,可以在 varchar() 中删除尾随空格。

【讨论】:

    【解决方案2】:

    在 MSSQL 中它可以正常工作,除非您不能使用 Ltrim,Rtrim... 功能... 请告诉我您使用的是哪个数据库??

    【讨论】:

    • 我正在使用 DB2 数据库
    【解决方案3】:

    您是如何创建表的(DDS 或脚本)?字段的数据类型是什么?

    尝试将字段定义为CHAR 数据类型。

    【讨论】:

    • 实际字段的数据类型是 varchar(250),我使用简单的创建查询创建了表
    【解决方案4】:

    在 sql server 中,当在 char 和 varchar 数据类型的列中插入前导空格时,会保留前导空格。但是尾随空格会被自动截断。

    create table TestSpace (firstname char(1000), lastname varchar(100))
    
    insert into TestSpace (firstname, lastname)
    select '  123', '  345'
    union all
    select '123  ', '345  '
    
    select firstname, lastname , LEN(firstname) firstlen, LEN(lastname) lastlen
    from TestSpace
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 2013-06-03
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多