s********e 发帖数: 893 | 1 有一个Web Form,用户需要输入地址。地址名可能会是一行或者两行。比如
1023 Richmond Dr -----保存到变量 ST_1里
或者
Apt 1234 ------保存到变量 ST_1里
1088 Bright Pkwy ------保存到变量 ST_2里
当在数据库里搜索这个地址时,可以用:
WHERE ((STREET_LINE1 = &ST_1& and STREET_LINE2 is null)
or
(STREET_LINE1 = &ST_1& and STREET_LINE2 = &ST_2&))
这个是可行的,不过我总觉得也可以用Case When结构。
and STREET_LINE1 = &ST_1&
and
(case when &ST_1& is not null
then STREET_LINE2 = &ST_2&
else STREET_LINE2 is null
end)
AND STREET_LINE1 = &ST_1&
and STREET_LINE2 =
(case when &ST_2& is not null
then &ST_2&
else null
end)
可是这两种方式都不对。我知道第二种里的 = NULL在oracle里是不成立的。可是不知
道该怎样改正。改成 in 也不行。
哪位给看看正确的写法应该是怎样。多谢了! |
B*****g 发帖数: 34098 | 2 IS NULL or IS NOT NULL
【在 s********e 的大作中提到】 : 有一个Web Form,用户需要输入地址。地址名可能会是一行或者两行。比如 : 1023 Richmond Dr -----保存到变量 ST_1里 : 或者 : Apt 1234 ------保存到变量 ST_1里 : 1088 Bright Pkwy ------保存到变量 ST_2里 : 当在数据库里搜索这个地址时,可以用: : WHERE ((STREET_LINE1 = &ST_1& and STREET_LINE2 is null) : or : (STREET_LINE1 = &ST_1& and STREET_LINE2 = &ST_2&)) : 这个是可行的,不过我总觉得也可以用Case When结构。
|
y****w 发帖数: 3747 | 3 考虑都定义成not null,如果是空用[default]空字符串。输入时 ''||xxx 处理一下。
这样就不用纠缠null了。
【在 s********e 的大作中提到】 : 有一个Web Form,用户需要输入地址。地址名可能会是一行或者两行。比如 : 1023 Richmond Dr -----保存到变量 ST_1里 : 或者 : Apt 1234 ------保存到变量 ST_1里 : 1088 Bright Pkwy ------保存到变量 ST_2里 : 当在数据库里搜索这个地址时,可以用: : WHERE ((STREET_LINE1 = &ST_1& and STREET_LINE2 is null) : or : (STREET_LINE1 = &ST_1& and STREET_LINE2 = &ST_2&)) : 这个是可行的,不过我总觉得也可以用Case When结构。
|
s********e 发帖数: 893 | 4 谢谢楼上回答,我知道用我上面写的第一个query可以,不过我还是不清楚该怎样改写
case when,正确的语法格式应该是怎样?多谢了。 |
B*****g 发帖数: 34098 | 5 第一个可以改成:
WHERE STREET_LINE1 = &ST_1&
AND (STREET_LINE2 IS NULL OR STREET_LINE2 = &ST_2&)
非要用case(为什么那?):
WHERE STREET_LINE1 = &ST_1&
AND (1 = CASE WHEN STREET_LINE2 IS NULL OR STREET_LINE2 = &ST_2& THEN 1 ELSE
0 END)
【在 s********e 的大作中提到】 : 谢谢楼上回答,我知道用我上面写的第一个query可以,不过我还是不清楚该怎样改写 : case when,正确的语法格式应该是怎样?多谢了。
|
s********e 发帖数: 893 | 6 多谢Beijing MM!你的这个写法是对的!但是像你说的,的确没必要用Case When。只
是我开始想到了case when,觉得应该很容易实现,不过stuck在 =null 和is null这个
地方了。
结合yhangw 的提议,我把我第二个 case when稍改写了一下就完全可以了。
AND STREET_LINE1 = &ST_1&
and nvl(STREET_LINE2,'X') =
(case when &ST_2& is not null
then &ST_2&
else 'X'
end)
这个例子本身用case when意义不大,一个or就可以替代。
但是对于如果对同一个field比较的对象有多种可能性,用case when在where 里可能还
是比较有用的。
再次感谢!周末愉快! |