Skip to content

1667. Fix Names in a Table

DifficultyEasy

Description

Table: Users

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| user_id        | int     |
| name           | varchar |
+----------------+---------+
user_id is the primary key (column with unique values) for this table.
This table contains the ID and the name of the user. The name consists of only lowercase and uppercase characters.

 

Write a solution to fix the names so that only the first character is uppercase and the rest are lowercase.

Return the result table ordered by user_id.

The result format is in the following example.

 

Example 1:

Input: 
Users table:
+---------+-------+
| user_id | name  |
+---------+-------+
| 1       | aLice |
| 2       | bOB   |
+---------+-------+
Output: 
+---------+-------+
| user_id | name  |
+---------+-------+
| 1       | Alice |
| 2       | Bob   |
+---------+-------+

Solutions

Solution 1

Thinking

Names must have a capital first letter and lowercase remainder. Concatenate \(\texttt{UPPER}(\texttt{LEFT}(name,1))\) with \(\texttt{LOWER}(\texttt{SUBSTRING}(name,2))\), then order by \(\texttt{user\_id}\).

1
2
3
4
5
6
7
SELECT
    user_id,
    CONCAT(UPPER(LEFT(name, 1)), LOWER(SUBSTRING(name, 2))) AS name
FROM
    users
ORDER BY
    user_id;

Solution 2

Thinking

Solution 1's \(\texttt{SUBSTRING}(name,2)\) omits the length and runs to the end. MySQL counts the third argument in characters, so \(\texttt{CHAR\_LENGTH}(name)\) supplies that count and the slice from the second character is the same suffix.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT
    user_id,
    CONCAT(
        UPPER(LEFT(name, 1)),
        LOWER(SUBSTRING(name, 2, CHAR_LENGTH(name)))
    ) AS name
FROM
    users
ORDER BY
    user_id;

Comments