2012-03-20 95 views
0

我遇到了数据库问题。我有如下因素:用不同的字符串替换值

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语句*从故事除了空字段。例如,如果故事中没有争论者/艺术家,我不希望该字段出现。

回答

1

如果你想通过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 
+0

工作就像一个魅力。是否有可能做到这一点,但只有首字母缩写?像BookName1这将是BN1?那么最后的另一个问题呢?你怎么看它?= – 2012-03-20 22:08:26

+1

@FabioAbreu你可以在你的插入/选择中放置你需要的任何值。我更新了我的回答,第二个问题的答案是 – Taryn 2012-03-20 22:10:52

+0

请查看关于第二个问题的讨论关于第二个问题的意见,请= =)thx提前帮助第一个问题 – 2012-03-20 22:23:19

0
Select CONCAT(artist, argument, etc) as joinedField 
FROM Story 

根据您的意见,我认为你可能会寻找到连接几个领域进入一个结果。如果你想使用空值,你应该能够在那里添加一些条件标准。

参考: http://www.1keydata.com/sql/sql-concatenate.html

+0

我打算选择*空字段除外。当艺术家和参议员不为空时,不要选择*。 – 2012-03-20 22:15:14

+0

所以你不想有空值返回,但你仍然想要行?你想用这个结果做什么?你是否试图将多个字段放在select语句中的单个字符串中?如果是这样,那应该是可行的。 – jheep 2012-03-20 22:17:18

+0

很好想象这个'select * from story where name_s ='StoryName1'我想选择这个选择,但我不想让它选择现有的空字段 – 2012-03-20 22:19:55