用不同的字符串替换值
我遇到了数据库问题。我有如下因素:用不同的字符串替换值
create table book
(
name_b varchaR(50) primary key,
typee varchaR(50) not null,
nmbr integer unique not null,
yeare numeric(4,0) default null,
)
create table story
(
id integer identity(1,1) primary key,
name_s varchar(100) not null,
chars varchar(100) not null,
code varchaR(200) null,
artist varchar(100) default null,
argument varchar(100) default null,
book_ref_name varchar(50) references book(name_b),
book_ref_nmbr integer references book(nmbr)
)
insert into story values
('StoryName1','StoryChars1',null,default,default,'BookName1',13),
('StoryName2','StoryChars2',null,default,default,'BookName2',35),
('StoryName3','StoryChars3',null,default,default,'BookName3',125)
insert into book values
('BookName1','Type1',13,default),
('BookName2','Type2',35,default),
('BookName3','Type3',125,default)
我想这个东西是从NULL更换,例如串结想象的故事表的第一项STORY.CODE
('StoryName1','StoryChars1',null,default,default,'BookName1',13)
在这种情况下,我希望将STORY.CODE替换为'StoryName1-StoryChars1-BookName1-13'。
这甚至有可能吗?如果它不是什么最近的可能性类似的东西? THX提前
另一个疑问我有,我怎么能作出这样的选择SELECT语句*从故事除了空字段。例如,如果故事中没有争论者/艺术家,我不希望该字段出现。
如果你想通过UPDATE
UPDATE story
SET code = name_s + '-' + chars + '-' + book_ref_name + '-' + Convert(varchar(50), book_ref_nmbr)
WHERE code IS NULL
通过INSERT
要做到这一点,你基本上做同样的事情:
INSERT INTO story (fields,....)
SELECT 'StoryName1'
,'StoryChars1'
,IsNull(('StoryName1' + '-' + 'StoryChars1'+ '-' + 'BookName1' + '-' + Convert(varchar(50), 13), codevalue)
,default,default,'BookName1',13
或者你可以使用一个CASE
INSERT INTO story (fields,....)
SELECT 'StoryName1'
,'StoryChars1'
, CASE
WHEN code Is Null
THEN ('StoryName1' + '-' + 'StoryChars1'+ '-' + 'BookName1' + '-' + Convert(varchar(50), 13)
ELSE yourcodevalue
END
,default,default,'BookName1',13
由于至于你对0123的第二个问题,我觉得这是你所需要的
SELECT *
FROM story
WHERE artist is not Null
AND/OR argument is not Null
Select CONCAT(artist, argument, etc) as joinedField
FROM Story
根据您的意见,我认为你可能会寻找到连接几个领域进入一个结果。如果你想使用空值,你应该能够在那里添加一些条件标准。
我打算选择*空字段除外。当艺术家和参议员不为空时,不要选择*。 – 2012-03-20 22:15:14
所以你不想有空值返回,但你仍然想要行?你想用这个结果做什么?你是否试图将多个字段放在select语句中的单个字符串中?如果是这样,那应该是可行的。 – jheep 2012-03-20 22:17:18
很好想象这个'select * from story where name_s ='StoryName1'我想选择这个选择,但我不想让它选择现有的空字段 – 2012-03-20 22:19:55
工作就像一个魅力。是否有可能做到这一点,但只有首字母缩写?像BookName1这将是BN1?那么最后的另一个问题呢?你怎么看它?= – 2012-03-20 22:08:26
@FabioAbreu你可以在你的插入/选择中放置你需要的任何值。我更新了我的回答,第二个问题的答案是 – Taryn 2012-03-20 22:10:52
请查看关于第二个问题的讨论关于第二个问题的意见,请= =)thx提前帮助第一个问题 – 2012-03-20 22:23:19