奇怪字符问题?

lumina 2003-10-09 12:25:07
declare @TicketNo varchar(13)
declare @YJTicketNo varchar(1000)
set @TicketNo = '00000222'
set @YJTicketNo = @TicketNo
select @YJTicketNo

如果将
set @YJTicketNo = TicketNo
改为
set @YJTicketNo = @YJTicketNo +' '+@TicketNo
结果就为null
问题是:
null +字符=null吗?
...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhdy 2003-10-09
  • 打赏
  • 举报
回复
set @YJTicketNo = isnull(@YJTicketNo,'') +' '+isnull(@TicketNo,'')
pengdali 2003-10-09
  • 打赏
  • 举报
回复
空值
空 (NULL) 值表示数值未知。空值不同于空白或零值。没有两个相等的空值。比较两个空值或将空值与任何其它数值相比均返回未知,这是因为每个空值均为未知。

空值通常表示未知、不可用或将在以后添加的数据。例如,客户的中间名首字母在客户下定单时可能不知道。

下面是有关空值的一些信息:

若要测试查询中的空值,请在 WHERE 子句中使用 IS NULL 或 IS NOT NULL。


在 SQL 查询分析器中查看查询结果时,空值在结果集内显示为 (null)。


可通过以下方法在列中插入空值:在 INSERT 或 UPDATE 语句中显式声明 NULL,或不使此列进入 INSERT 语句,或使用 ALTER TABLE 语句在现有表中新添一列。


不能将空值用于区分表中两行所需的信息(例如,外键或主键)。
在程序代码中,可以检查空值以便只在具有有效(或非空)数据的行上进行某些计算。例如,报表可以只打印社会安全列中数据不为空的列。执行计算时消除空值很重要,因为如果包含空值列,某些计算(如平均值)会不准确。

如果数据中可能包含空值,创建查询或数据修改语句消除空值或将空值转换成其它值是一个好办法(如果不想在数据中出现空值)。



重要 为了减少对已有查询或报表的维护和可能的影响,建议尽量少使用空值。对查询和数据修改语句进行规划,使空值的影响降到最小。


如果数据出现空值,则逻辑运算符和比较运算符有可能返回 TRUE 或 FALSE 以外的第三种结果 UNKNOWN。需要三值逻辑是导致许多应用程序出错之源。下面这些表概括了引入空值比较的效果。

下表显示将 AND 运算符应用到两个布尔操作数的结果。

AND TRUE UNKNOWN FALSE
TRUE TRUE UNKNOWN FALSE
UNKNOWN UNKNOWN UNKNOWN FALSE
FALSE FALSE FALSE FALSE


下表显示将 OR 运算符应用到两个布尔操作数的结果。

OR TRUE UNKNOWN FALSE
TRUE TRUE TRUE TRUE
UNKNOWN TRUE UNKNOWN UNKNOWN
FALSE TRUE UNKNOWN FALSE


下表显示 NOT 运算符求反或反转方式,以及布尔运算符的结果。

应用了 NOT 运算符的布尔表达式 取值为
TRUE FALSE
UNKNOWN UNKNOWN
FALSE TRUE


SQL-92 标准引入了关键字 IS NULL 和 IS NOT NULL 来测试空值。

应用了 IS NULL 运算符的布尔表达式 取值为 应用了 IS NOT NULL 运算符的布尔表达式 取值为
TRUE FALSE TRUE TRUE
NULL TRUE NULL FALSE
FALSE FALSE FALSE TRUE


Transact-SQL 还提供扩展空值处理。如果 ANSI_NULLS 选项设为关,则空值之间的比较(如 NULL = NULL)等于 TRUE。空值与任何其它数据类型之间的比较等于 FALSE。
pengdali 2003-10-09
  • 打赏
  • 举报
回复
ISNULL
使用指定的替换值替换 NULL。

语法
ISNULL ( check_expression , replacement_value )

参数
check_expression

将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。

replacement_value

在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。

返回类型
返回与 check_expression 相同的类型。

注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。

示例
A. 将 ISNULL 与 AVG 一起使用
下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。

USE pubs
GO
SELECT AVG(ISNULL(price, $10.00))
FROM titles
GO

下面是结果集:

--------------------------
14.24

(1 row(s) affected)

B. 使用 ISNULL
下面的示例为 titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是 NULL,那么在结果集中显示的价格为 0.00。

USE pubs
GO
SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type,
ISNULL(price, 0.00) AS Price
FROM titles
GO

下面是结果集:

Title Type Price
--------------- ------------ --------------------------
The Busy Execut business 19.99
Cooking with Co business 11.95
You Can Combat business 2.99
Straight Talk A business 19.99
Silicon Valley mod_cook 19.99
The Gourmet Mic mod_cook 2.99
The Psychology UNDECIDED 0.00
But Is It User popular_comp 22.95
Secrets of Sili popular_comp 20.00
Net Etiquette popular_comp 0.00
Computer Phobic psychology 21.59
Is Anger the En psychology 10.95
Life Without Fe psychology 7.00
Prolonged Data psychology 19.99
Emotional Secur psychology 7.99
Onions, Leeks, trad_cook 20.95
Fifty Years in trad_cook 11.95
Sushi, Anyone? trad_cook 14.99

(18 row(s) affected)

伍子V5 2003-10-09
  • 打赏
  • 举报
回复
是的,所以你要用isnull(字段,'')来转变
pengdali 2003-10-09
  • 打赏
  • 举报
回复
对,你要用:

set @YJTicketNo =isnull(@YJTicketNo,'')+' '+@TicketNo

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧