mysql语句中,格式化列值的方式case
时间: 2024-10-16 16:04:00 浏览: 28
在MySQL中,`CASE` 语句用于根据特定条件返回不同的值,常用于格式化、转换或简化数据呈现。它的工作原理类似于一个简单的"if...then...else..."结构。基本语法如下:
```sql
SELECT
CASE
WHEN condition THEN result_if_true
ELSE result_if_false
END AS formatted_column
FROM table_name;
```
在这个例子中:
- `condition` 是一个布尔表达式,如果满足,则该部分的 `result_if_true` 将被应用。
- `result_if_true` 和 `result_if_false` 分别是当条件满足和不满足时,你希望返回的列值。
- `formatted_column` 是你想要显示给用户的格式化后的列名。
例如,如果你想将年龄字段格式化为“儿童”、“青少年”、“成年”或“老年”,你可以这样做:
```sql
SELECT
CASE
WHEN age BETWEEN 0 AND 12 THEN '儿童'
WHEN age BETWEEN 13 AND 18 THEN '青少年'
WHEN age BETWEEN 19 AND 64 THEN '成年'
ELSE '老年'
END AS age_group
FROM users;
```
相关问题
MySQL中case
CASE 是 MySQL 中的一种结构化语句,用于在 SELECT、UPDATE 或 DELETE 语句中对数据进行分类和判断。它可以对数据进行多重分类,每个分类都有一个特定的结果,当某个分类符合条件时,就返回对应的结果。
语法格式:
CASE
WHEN condition THEN result
WHEN condition THEN result
...
ELSE result
END
例如:
SELECT
column,
CASE
WHEN column = value THEN 'A'
WHEN column = value THEN 'B'
ELSE 'C'
END AS alias
FROM table_name;
#define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6031) #include <stdio.h> #include <stdlib.h> #include <mysql.h> #include <string.h> #define N 3 MYSQL* conn; MYSQL m; mysql_init(); void initialize() { // 初始化链接 conn = mysql_init(NULL); mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gbk"); // 连接数据库 if (!mysql_real_connect(conn, "localhost", "b", "12345", "tang", 0, NULL, 0)) { printf("连接数据库失败: %s\n", mysql_error(conn)); exit(1); } else printf("数据库连接成功!\n"); } void Insert(MYSQL* conn) { int i = 0; char* str1 = "insert into student(id,name,chengji) values("; char sql_insert[200]; for (i = 1; i <= N; i++) { char id[12], name[9]; char chengji[9]; printf("请输入学生学号:"); fgets(id, 12, stdin); printf("请输入学生姓名:"); fgets(name, 9, stdin); printf("请输入学生成绩:"); fgets(chengji, 9, stdin); //int n = getchar(); sprintf_s(sql_insert, sizeof(sql_insert), "%s'%s','%s','%s'%s", str1, id, name, chengji, ")"); mysql_query(conn, sql_insert); printf("录入信息成功!\n"); } return; } // 显示学生信息 void Display(MYSQL* mysql) { char* str = "select * from student"; MYSQL_RES* res; //一个结果集结构体 MYSQL_ROW row = NULL; //char**二维数组,存放一条条记录(一条记录代表一个学生的信息) char id[12], name[9]; char chengji[9]; //向MySQL发送SQL语句 mysql_query(mysql, str); //获取结果集 res = mysql_store_result(mysql); //打印 printf("id\t name\t chengji\t\n"); while (row = mysql_fetch_row(res)) { for (int i = 0; i < mysql_num_fields(res); i++) { switch (i) { case 0: { strcpy(id, row[i]); break; } case 1: { strcpy(name, row[i]); break; } case 2: { strcpy(chengji, row[i]); break; } } } printf("%s\t %s\t %s\t\n", id, name, chengji); } mysql_free_result(res); } void finalize() { // 关闭连接 mysql_close(conn); printf("已关闭数据库"); } int main() { initialize(); Insert(conn); Display(conn); finalize(); return 0; }修改代码并解释
修改后的代码如下:
```
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <string.h>
#define N 3
MYSQL* conn;
void initialize() {
// 初始化链接
conn = mysql_init(NULL);
mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gbk");
// 连接数据库
if (!mysql_real_connect(conn, "localhost", "b", "12345", "tang", 0, NULL, 0)) {
printf("连接数据库失败: %s\n", mysql_error(conn));
exit(1);
}
else {
printf("数据库连接成功!\n");
}
}
void Insert(MYSQL* conn) {
int i = 0;
char* str1 = "insert into student(id,name,chengji) values(";
char sql_insert[200];
for (i = 1; i <= N; i++) {
char id[12], name[9], chengji[9];
printf("请输入学生学号:");
fgets(id, 12, stdin);
printf("请输入学生姓名:");
fgets(name, 9, stdin);
printf("请输入学生成绩:");
fgets(chengji, 9, stdin);
// fgets会读取到'\n',需要将其替换为'\0'
id[strcspn(id, "\n")] = '\0';
name[strcspn(name, "\n")] = '\0';
chengji[strcspn(chengji, "\n")] = '\0';
sprintf_s(sql_insert, sizeof(sql_insert), "%s'%s','%s','%s')", str1, id, name, chengji);
mysql_query(conn, sql_insert);
printf("录入信息成功!\n");
}
return;
}
void Display(MYSQL* mysql) {
char* str = "select * from student";
MYSQL_RES* res; //一个结果集结构体
MYSQL_ROW row = NULL; //char**二维数组,存放一条条记录(一条记录代表一个学生的信息)
char id[12], name[9], chengji[9];
//向MySQL发送SQL语句
mysql_query(mysql, str);
//获取结果集
res = mysql_store_result(mysql);
//打印
printf("id\t name\t chengji\t\n");
while (row = mysql_fetch_row(res)) {
strcpy(id, row[0]);
strcpy(name, row[1]);
strcpy(chengji, row[2]);
printf("%s\t %s\t %s\t\n", id, name, chengji);
}
mysql_free_result(res);
}
void finalize() {
// 关闭连接
mysql_close(conn);
printf("已关闭数据库");
}
int main() {
initialize();
Insert(conn);
Display(conn);
finalize();
return 0;
}
```
主要修改的地方:
1. 在输入学生信息时,使用`fgets`函数读取输入,需要将读取到的换行符`\n`替换为字符串结束符`\0`。
2. 在显示学生信息时,直接使用`strcpy`函数将结果集中的字符串赋值给变量,不再使用`switch`语句。
3. 在插入学生信息时,修正了SQL语句的拼接错误,将`'%s'%s`改为`'%s','%s','%s')`。
4. 对代码进行了格式化,使其更加清晰易读。
该程序的功能是将学生信息录入数据库,并显示出来。程序在运行时会提示用户输入学生学号、姓名、成绩等信息,将这些信息插入到数据库中。然后程序会查询数据库中的所有学生信息,并将其按照一定的格式打印出来。最后关闭数据库连接。
阅读全文