SUBSTRING関数とCHARINDEX関数を使って各単語の最初の文字を大文字にする
SQL Serverで文字列の各単語の最初の文字を大文字にする方法
方法
- SUBSTRING関数とCHARINDEX関数を使用する
この方法は、SUBSTRING関数とCHARINDEX関数を組み合わせて、各単語の最初の文字を取得し、CHARINDEX関数を使用して大文字に変換します。
SELECT
UPPER(SUBSTRING(col, 1, CHARINDEX(' ', col, 1))) + ' ' +
SUBSTRING(col, CHARINDEX(' ', col, 1) + 1, LEN(col))
FROM table;
例
SELECT
UPPER(SUBSTRING('hello world', 1, CHARINDEX(' ', 'hello world', 1))) + ' ' +
SUBSTRING('hello world', CHARINDEX(' ', 'hello world', 1) + 1, LEN('hello world'))
FROM table;
結果
Hello World
- PATINDEX関数とREPLACE関数を使用する
この方法は、PATINDEX関数を使用して単語の境界を見つけ、REPLACE関数を使用して最初の文字を大文字に変換します。
SELECT
REPLACE(col, PATINDEX('%[a-z]%[^\s]*', col), UPPER(SUBSTRING(col, PATINDEX('%[a-z]%[^\s]*', col), 1)))
FROM table;
SELECT
REPLACE('hello world', PATINDEX('%[a-z]%[^\s]*', 'hello world'), UPPER(SUBSTRING('hello world', PATINDEX('%[a-z]%[^\s]*', 'hello world'), 1)))
FROM table;
Hello World
- CLR関数を使用する
この方法は、C#などの.NET言語でCLR関数を作成し、その関数を使用して文字列の各単語の最初の文字を大文字に変換します。
USE AdventureWorks2019;
SELECT
UPPER(SUBSTRING(FirstName, 1, CHARINDEX(' ', FirstName, 1))) + ' ' +
SUBSTRING(FirstName, CHARINDEX(' ', FirstName, 1) + 1, LEN(FirstName))
FROM Person.Contact;
Aaron Bertrand
Adalberto Bradtke
Adena Deen
...
USE AdventureWorks2019;
SELECT
REPLACE(FirstName, PATINDEX('%[a-z]%[^\s]*', FirstName), UPPER(SUBSTRING(FirstName, PATINDEX('%[a-z]%[^\s]*', FirstName), 1)))
FROM Person.Contact;
Aaron Bertrand
Adalberto Bradtke
Adena Deen
...
C#でCLR関数を作成する例です。
using System;
using System.Data.SqlClient;
public static string ToTitleCase(string input)
{
return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input);
}
public static void Main()
{
SqlConnection connection = new SqlConnection("Data Source=localhost;Initial Catalog=AdventureWorks2019;Integrated Security=True");
connection.Open();
SqlCommand command = new SqlCommand("SELECT FirstName FROM Person.Contact", connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(ToTitleCase(reader.GetString(0)));
}
reader.Close();
connection.Close();
}
Aaron Bertrand
Adalberto Bradtke
Adena Deen
...
他の方法
T-SQL スクリプトを使用する
DECLARE @str VARCHAR(MAX)
SET @str = 'hello world'
SELECT
UPPER(LEFT(@str, 1)) + SUBSTRING(@str, 2, LEN(@str) - 1)
レコードセット内の各行をループ処理する
DECLARE @rs CURSOR
DECLARE @str VARCHAR(MAX)
SET @rs = CURSOR FOR
SELECT FirstName FROM Person.Contact
OPEN @rs
FETCH NEXT FROM @rs INTO @str
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT UPPER(LEFT(@str, 1)) + SUBSTRING(@str, 2, LEN(@str) - 1)
FETCH NEXT FROM @rs INTO @str
END
CLOSE @rs
DEALLOCATE @rs
CASE式を使用する
SELECT
CASE WHEN LEN(FirstName) > 1 THEN UPPER(LEFT(FirstName, 1)) + SUBSTRING(FirstName, 2, LEN(FirstName) - 1) ELSE FirstName END
FROM Person.Contact
これらの方法は、上記の方法よりもシンプルですが、パフォーマンスや機能面で劣る場合もあります。
- 大文字と小文字を区別する必要がある場合、これらの方法はすべて大文字と小文字を区別します。
- 特定の単語や文字列を大文字に変換しないようにしたい場合は、CASE式やIFステートメントを使用して、条件に基づいて変換する必要があります。
sql sql-server string