How to control strings with the cast statement of MSSQL

  • Often, you will need to control the width of the columns displayed.
  • It's always better to control the width of the columns with the front-end, but sometimes you will need to do it in SQL Server.
  • You can use the cast, instead of the substring for doing the job.

Applies to:

  • Microsoft SQL Server 2000
  • Microsoft SQL Server 2005
  • Microsoft SQL Server 2008

Data used

  1. SELECT database_id,FILE_ID,type_desc,name,physical_name
  2. FROM sys.master_files;
  3. go
database_id file_id     type_desc                                                    name                                                                                                                             physical_name
----------- ----------- ------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1           1           ROWS                                                         master                                                                                                                           C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf
1           2           LOG                                                          mastlog                                                                                                                          C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf
2           1           ROWS                                                         tempdev                                                                                                                          c:\syv\tempdb.mdf
2           2           LOG                                                          templog                                                                                                                          c:\syv\templog.ldf
3           1           ROWS                                                         modeldev                                                                                                                         C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\model.mdf
3           2           LOG                                                          modellog                                                                                                                         C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\modellog.ldf
4           1           ROWS                                                         MSDBData                                                                                                                         C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBData.mdf
4           2           LOG                                                          MSDBLog                                                                                                                          C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBLog.ldf
5           1           ROWS                                                         ReportServer                                                                                                                     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServer.mdf
5           2           LOG                                                          ReportServer_log                                                                                                                 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServer_log.LDF
6           1           ROWS                                                         ReportServerTempDB                                                                                                               C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServerTempDB.mdf
6           2           LOG                                                          ReportServerTempDB_log                                                                                                           C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServerTempDB_log.LDF
7           1           ROWS                                                         AdventureWorksDW_Data                                                                                                            C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksDW_Data.mdf
7           2           LOG                                                          AdventureWorksDW_Log                                                                                                             C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksDW_Log.ldf
8           1           ROWS                                                         AdventureWorks_Data                                                                                                              C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf
8           2           LOG                                                          AdventureWorks_Log                                                                                                               C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Log.ldf
9           1           ROWS                                                         AdventureWorksLT_Data                                                                                                            C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksLT_Data.mdf
9           2           LOG                                                          AdventureWorksLT_Log                                                                                                             C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\AdventureWorksLT_Log.ldf
10          1           ROWS                                                         sql911                                                                                                                           C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sql911.mdf
10          2           LOG                                                          sql911_log                                                                                                                       C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sql911_log.LDF

(20 row(s) affected)
  • The type_desc is 60 characters wide
  • The name is 127 characters wide
  • The physical_name is 256 characters wide
    This makes it difficult for the web, where there is a lot of horizontal scrolling. It can be controlled by using cast and varchar.

cast varchar

  1. SELECT database_id,FILE_ID,
  2.        CAST(type_desc AS VARCHAR(6)) AS 'Type',
  3.        CAST(name AS VARCHAR(24)) AS 'Name',
  4.        CAST(physical_name AS VARCHAR(64)) AS 'Physical name'
  5. FROM sys.master_files;
  6. go
database_id file_id     Type   Name                     Physical name
----------- ----------- ------ ------------------------ ----------------------------------------------------------------
1           1           ROWS   master                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.
1           2           LOG    mastlog                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog
2           1           ROWS   tempdev                  c:\syv\tempdb.mdf
2           2           LOG    templog                  c:\syv\templog.ldf
3           1           ROWS   modeldev                 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\model.m
3           2           LOG    modellog                 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\modello
4           1           ROWS   MSDBData                 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBDat
4           2           LOG    MSDBLog                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBLog
5           1           ROWS   ReportServer             C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportS
5           2           LOG    ReportServer_log         C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportS
6           1           ROWS   ReportServerTempDB       C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportS
6           2           LOG    ReportServerTempDB_log   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportS
7           1           ROWS   AdventureWorksDW_Data    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Adventu
7           2           LOG    AdventureWorksDW_Log     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Adventu
8           1           ROWS   AdventureWorks_Data      C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Adventu
8           2           LOG    AdventureWorks_Log       C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Adventu
9           1           ROWS   AdventureWorksLT_Data    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Adventu
9           2           LOG    AdventureWorksLT_Log     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Adventu
10          1           ROWS   sql911                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sql911.
10          2           LOG    sql911_log               C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sql911_

(20 row(s) affected)
  • The cast varchar truncates the data.
  • The physical name is truncated
  1. SELECT database_id,FILE_ID,
  2.        CAST(type_desc AS VARCHAR(6)) AS 'Type',
  3.        CAST(name AS VARCHAR(24)) AS 'Name',
  4.        CAST(physical_name AS VARCHAR(96)) AS 'Physical name'
  5. FROM sys.master_files;
  6. go
database_id file_id     Type   Name                     Physical name
----------- ----------- ------ ------------------------ ------------------------------------------------------------------------------------------------
1           1           ROWS   master                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf
1           2           LOG    mastlog                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf
2           1           ROWS   tempdev                  c:\syv\tempdb.mdf
2           2           LOG    templog                  c:\syv\templog.ldf
3           1           ROWS   modeldev                 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\model.mdf
3           2           LOG    modellog                 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\modellog.ldf
4           1           ROWS   MSDBData                 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBData.mdf
4           2           LOG    MSDBLog                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBLog.ldf
5           1           ROWS   ReportServer             C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServer.mdf
5           2           LOG    ReportServer_log         C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServer_log.LDF
6           1           ROWS   ReportServerTempDB       C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServerTempDB.mdf
6           2           LOG    ReportServerTempDB_log   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ReportServerTempDB_log.LDF
7           1           ROWS   AdventureWorksDW_Data    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksDW_Data.mdf
7           2           LOG    AdventureWorksDW_Log     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksDW_Log.ldf
8           1           ROWS   AdventureWorks_Data      C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf
8           2           LOG    AdventureWorks_Log       C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Log.ldf
9           1           ROWS   AdventureWorksLT_Data    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksLT_Data.mdf
9           2           LOG    AdventureWorksLT_Log     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\AdventureWorksLT_Log.ldf
10          1           ROWS   sql911                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sql911.mdf
10          2           LOG    sql911_log               C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sql911_log.LDF

(20 row(s) affected)