SELECT
CONVERT(CHAR(10), Title)
+ CONVERT(CHAR(75), FirstName)
+ CONVERT(CHAR(75), LastName)
+ CONVERT(CHAR(100), EmailAddress)
FROM
AdventureWorks.Person.Contact
如果某个值为null,那么在这种情况下我将如何容纳它?
我的最终目标:创建固定长度的输出。
理想情况下:如果它是一个空值,则make是指定长度的空白区域。
提前致谢!
答案 0 :(得分:4)
您也可以使用CAST CHAR技术,而不是通过复制填充字符串:
create table Person
(Firstname varchar(50) not null,
Lastname varchar(50) not null,
Email varchar(50));
insert into Person values
('John Winston','Lennon', 'jwl@beatles.com'),
('James Paul','McCartney', null),
('George','Harrison', 'g@beatles.com'),
('Ringo','Starr', 'rstarkey@beatles.com');
select
Fullname =
CAST(Lastname, AS CHAR(50))
+ CAST(Firstname AS CHAR(50))
+ CAST(COALESCE(Email,'') AS CHAR(50))
from person
http://www.sqlfiddle.com/#!3/bb771/1
注意,SQL Fiddle没有错误也没有上面的查询,只是浏览器将多个空格渲染为一个,您可以通过在网格上使用Inspect Element(如果您使用的是Google Chrome)看到它的50个字符。每个CAST上显示50个字符
当然您也可以使用CONVERT http://www.sqlfiddle.com/#!3/bb771/3
select
Fullname =
CONVERT(CHAR(50), Lastname)
+ CONVERT(CHAR(50), Firstname)
+ CONVERT(CHAR(50), COALESCE(Email,''))
from person
当然你也可以使用ISNULL http://www.sqlfiddle.com/#!3/bb771/4
select
Fullname =
CONVERT(CHAR(50), Lastname)
+ CONVERT(CHAR(50), Firstname)
+ CONVERT(CHAR(50), ISNULL(Email,''))
from person
只是为了验证事情是否按预期工作,可视化空间:
with a as
(
select
Fullname =
CONVERT(CHAR(50), Lastname)
+ CONVERT(CHAR(50), Firstname)
+ CONVERT(CHAR(50), COALESCE(Email,''))
from person
)
select replace(Fullname,' ','.') from a
Lennon............................................John.Winston......................................jwl@beatles.com...................................
McCartney.........................................James.Paul..........................................................................................
Harrison..........................................George............................................g@beatles.com.....................................
Starr.............................................Ringo.............................................rstarkey@beatles.com..............................
http://www.sqlfiddle.com/#!3/bb771/8
另一个提示,任何表现杀手,例如应该避免使用unnecessary function call,以便快速查询。在这种情况下,如果Firstname和Lastname在输入上拒绝NULL,则不需要在它们周围放置COALESCE或ISNULL,在这种情况下,我们只是将COALESCE或ISNULL放在电子邮件中
答案 1 :(得分:0)
SELECT COALESCE( CONVERT(CHAR(10), Title), REPLICATE(' ', 10)),
COALESCE( CONVERT(CHAR(75), FirstName), REPLICATE(' ', 75)),
COALESCE( CONVERT(CHAR(75), LastName), REPLICATE(' ', 75)),
COALESCE( CONVERT(CHAR(100), EmailAddress), REPLICATE(' ', 100))
FROM AdventureWorks.Person.Contact
您正在寻找的是COALESCE
(和REPLICATE
,让您的生活更轻松)
SELECT LEFT(CONCAT( Title, REPLICATE(' ',10) ), 10) AS Title,
LEFT(CONCAT( FirstName, REPLICATE(' ',75) ), 75) AS FirstName,
LEFT(CONCAT( LastName, REPLICATE(' ',75) ), 75) AS LastName,
LEFT(CONCAT( EmailAddress, REPLICATE(' ',100) ), 100) AS FirstName
FROM AdventureWorks.Person.Contact
答案 2 :(得分:0)
我完成此操作的最简单方法是使用ISNULL语句。我通常会写出ISNULL(字段,'')或任何我将传递给null的值,例如N / a。此ISNULL命令接受一个值,如果值为null则返回第二个参数,否则返回第一个参数的值。