Слегка измененная версия кода 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
Вы можете использовать сортировку с учетом регистра . Я считаю, что по умолчанию регистр не учитывается. Пример:
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)
Базовый , например, .
SELECT * FROM foo WHERE bar REGEXP '[A-Z]';
SELECT * FROM table1 WHERE (columnname COLLATE latin1_bin )=UPPER(depart);