SELECT
CONVERT(CHAR(10), Title)
+ CONVERT(CHAR(75), FirstName)
+ CONVERT(CHAR(75), LastName)
+ CONVERT(CHAR(100), EmailAddress)
FROM
AdventureWorks.Person.Contact
如果一个值为空,在这种情况下我将如何适应?
我的最终目标:创建一个固定长度的输出。
理想情况下:如果它是空值,则 make 是指定长度的空白。
提前致谢!
SELECT
CONVERT(CHAR(10), Title)
+ CONVERT(CHAR(75), FirstName)
+ CONVERT(CHAR(75), LastName)
+ CONVERT(CHAR(100), EmailAddress)
FROM
AdventureWorks.Person.Contact
如果一个值为空,在这种情况下我将如何适应?
我的最终目标:创建一个固定长度的输出。
理想情况下:如果它是空值,则 make 是指定长度的空白。
提前致谢!
您还可以使用 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
另一个提示,应避免任何性能杀手,例如不必要的函数调用,以使您的查询更快。在这种情况下,如果 Firstname 和 Lastname 在输入中拒绝 NULL,则无需在它们周围放置 COALESCE 或 ISNULL,在这种情况下,我们只需在 Email 上放置 COALESCE 或 ISNULL
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
我完成此操作的最简单方法是使用 ISNULL 语句。我通常会写出 ISNULL(Field,' ') 或我会为空值传递的任何值,例如 N/a。此 ISNULL 命令接受一个值,如果该值为 null,则返回第二个参数,否则返回第一个参数的值。