Выбрать ВСЕ поля, содержащие только ЗАГЛАВНЫЕ буквы

Слегка измененная версия кода SLaks

static string FormatNumber(long num)
{
    if (num >= 100000000) {
        return (num / 1000000D).ToString("0.#M");
    }
    if (num >= 1000000) {
        return (num / 1000000D).ToString("0.##M");
    }
    if (num >= 100000) {
        return (num / 1000D).ToString("0.#k");
    }
    if (num >= 10000) {
        return (num / 1000D).ToString("0.##k");
    }

    return num.ToString("#,0");
}

Это вернет следующие значения:

 123        ->  123
 1234       ->  1,234
 12345      ->  12.35k
 123456     ->  123.4k
 1234567    ->  1.23M
 12345678   ->  12.35M
 123456789  ->  123.5M

23
задан Aivan Monceller 1 October 2010 в 05:48
поделиться

3 ответа

Вы можете использовать сортировку с учетом регистра . Я считаю, что по умолчанию регистр не учитывается. Пример:

CREATE TABLE my_table (
   id int,
   name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_cs;

INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');

Затем:

SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+ 

Если вы не хотите использовать сортировку с учетом регистра для всей таблицы, вы также можете использовать COLLATE предложение, как @kchau предложил в другом ответе .

Давайте попробуем с таблицей с использованием сортировки без учета регистра:

CREATE TABLE my_table (
   id int,
   name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_ci;

INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');

Это не будет работать очень хорошо:

SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+ 

Но мы можем использовать предложение COLLATE для сопоставить поле имени с учетом регистра:

SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+;
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)
; +------+-----------+ | id | name | +------+-----------+ | 1 | SomeThing | | 2 | something | | 3 | SOMETHING | +------+-----------+ 3 rows in set (0.00 sec)

Но мы можем использовать предложение COLLATE для сопоставить поле имени с учетом регистра:

SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+;
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)
; +------+-----------+ | id | name | +------+-----------+ | 3 | SOMETHING | +------+-----------+ 1 row in set (0.00 sec)

Если вы не хотите использовать сортировку с учетом регистра для всей таблицы, вы также можете использовать COLLATE предложение, как @kchau предложил в другом ответе .

Давайте попробуем с таблицей с использованием сортировки без учета регистра:

CREATE TABLE my_table (
   id int,
   name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_ci;

INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');

Это не будет работать очень хорошо:

SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+ 

Но мы можем использовать предложение COLLATE для сопоставить поле имени с учетом регистра:

SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+;
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)
; +------+-----------+ | id | name | +------+-----------+ | 1 | SomeThing | | 2 | something | | 3 | SOMETHING | +------+-----------+ 3 rows in set (0.00 sec)

Но мы можем использовать предложение COLLATE для сопоставить поле имени с учетом регистра:

SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+;
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)
23
ответ дан 29 November 2019 в 01:54
поделиться

Базовый , например, .

SELECT * FROM foo WHERE bar REGEXP '[A-Z]';
1
ответ дан 29 November 2019 в 01:54
поделиться
SELECT * FROM table1 WHERE (columnname COLLATE latin1_bin )=UPPER(depart);
6
ответ дан 29 November 2019 в 01:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: