レプリケートによって文字列をパディングする代わりに、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 にはエラーも上記のクエリもありません。ブラウザーが複数のスペースを 1 つにレンダリングするだけです。グリッドで Inspect Element (Google Chrome を使用している場合) を使用すると、50 文字であることを確認できます。ディスプレイには、各キャストで 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
もう 1 つのヒントとして、クエリを高速化するために、不要な関数呼び出しなどのパフォーマンス キラーを避ける必要があります。この場合、Firstname と Lastname が入力で NULL を拒否する場合、COALESCE または ISNULL をそれらの前後に配置する必要はありません。この場合、Email に COALESCE または ISNULL を配置するだけです。