用不同的字符串替换值

时间:2012-03-20 21:58:07

标签: sql-server sql-server-2008

我的数据库出了问题。我有下列内容:

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)

我想要的是将STORY.CODE从NULL替换为字符串的连接点,例如想象一下STORY表的第一个条目

('StoryName1','StoryChars1',null,default,default,'BookName1',13)

在这种情况下,我希望将STORY.CODE替换为'StoryName1-StoryChars1-BookName1-13'。

这甚至可能吗?如果不是最接近的类似事件的可能性是什么? thx提前


我有另一个疑问,我怎样才能创建一个SELECT语句,从STORY中选择*除了空字段。例如,如果故事没有论据者/艺术家,我不希望该字段出现。

2 个答案:

答案 0 :(得分: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

关于SELECT的第二个问题,我认为这就是你需要的

SELECT *
FROM story
WHERE artist is not Null
AND/OR argument is not Null

答案 1 :(得分:0)

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

根据您的反馈,我认为您可能希望将多个字段连接成一个结果。如果你想使用空值,你应该能够在那里设置一些条件标准。

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