show_str.c

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <stdio.h>

void main(void)
 {
   char string[256];  // String input by user
   int i;             // Index into the string

   printf("Type a string of characters and press Enter:/n");
   gets(string);

   // Display each string character until NULL is found
   for (i = 0; string[i] != NULL; i++)
     putchar(string[i]);
 
   printf("/nThe number of characters in the string is %d/n", i);
 }

你的 SQL 查询中使用了 `STR_TO_DATE()` 函数将字符串转换为日期时间,并将其与 `MENTOR_START_TIME` 和 `MENTOR_END_TIME` 进行比较。但查询结果为空,可能的原因有几个: --- ## ✅ 问题分析 你写的这一段是: ```sql STR_TO_DATE('2025-08-06 10:30:22', '%Y-%m-%d %H:%i:%S') BETWEEN mutual_selection_rule.MENTOR_START_TIME AND mutual_selection_rule.MENTOR_END_TIME ``` 这个逻辑是正确的,**但是**: ### ❗常见问题点: 1. **`MENTOR_START_TIME` 和 `MENTOR_END_TIME` 的字段类型不是 `DATETIME` 或 `DATE`,而是字符串类型(如 VARCHAR)** - 如果它们是字符串,那么你用 `STR_TO_DATE()` 转换的是右边的常量,但左边的字段没有转换,会导致比较失败。 2. **`MENTOR_START_TIME` 或 `MENTOR_END_TIME` 中存在 `NULL` 值** - 一旦其中一个是 `NULL`,`BETWEEN` 条件将不会成立。 3. **时区问题(如果你的字段是 `TIMESTAMP` 类型)** - `STR_TO_DATE()` 不带时区信息,而 `TIMESTAMP` 会自动转换为当前会话的时区。 4. **字段中存在多余的空格或格式不一致** - 比如 `2025-08-06 10:30:22` 和 `2025-08-06T10:30:22` 格式不同。 --- ## ✅ 推荐修改方案 ### ✅ 方案一:确保字段是 `DATETIME` 类型(推荐) 你可以使用 `SHOW CREATE TABLE mutual_selection_rule;` 查看字段类型。 如果字段是 `VARCHAR` 类型,**必须在查询时进行转换**: ```sql STR_TO_DATE('2025-08-06 10:30:22', '%Y-%m-%d %H:%i:%S') BETWEEN STR_TO_DATE(mutual_selection_rule.MENTOR_START_TIME, '%Y-%m-%d %H:%i:%S') AND STR_TO_DATE(mutual_selection_rule.MENTOR_END_TIME, '%Y-%m-%d %H:%i:%S') ``` > ⚠️ 注意:你必须知道 `MENTOR_START_TIME` 和 `MENTOR_END_TIME` 的格式,比如是 `YYYY-MM-DD HH:MM:SS` 还是其他格式,否则转换会失败。 --- ### ✅ 方案二:检查字段是否为空或格式错误 ```sql WHERE mutual_selection_rule.MENTOR_START_TIME IS NOT NULL AND mutual_selection_rule.MENTOR_END_TIME IS NOT NULL AND STR_TO_DATE('2025-08-06 10:30:22', '%Y-%m-%d %H:%i:%s') BETWEEN STR_TO_DATE(mutual_selection_rule.MENTOR_START_TIME, '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE(mutual_selection_rule.MENTOR_END_TIME, '%Y-%m-%d %H:%i:%s') ``` --- ## ✅ 最终推荐查询(假设字段是字符串) ```sql SELECT mentor_recruit.ID, mentor_recruit.JSBH, mentor_recruit.YJXK_CODE, mentor_recruit.RJXK_CODE, mentor_recruit.DEPT_CODE, mutual_selection_rule.IS_RELATED_MAJORS, mentor_enrollment_num.PZZSRS, CONCAT(mutual_selection_rule.MENTOR_START_TIME, '~', mutual_selection_rule.MENTOR_END_TIME) AS MENTOR_TIME, m.numCount FROM mentor_recruit LEFT JOIN mentor_enrollment_num ON mentor_enrollment_num.apply_id = mentor_recruit.ID LEFT JOIN mutual_selection_rule ON mentor_enrollment_num.Grade = mutual_selection_rule.GRADE AND mentor_recruit.DEPT_CODE = mutual_selection_rule.DEPT_CODE LEFT JOIN ( SELECT RECRUIT_ID, COUNT(*) as numCount FROM mentor_student_selected WHERE IS_CURRENT = 'Y' AND MENTOR_SORT = 1 GROUP BY RECRUIT_ID ) as m ON m.RECRUIT_ID = mentor_recruit.ID WHERE mentor_recruit.JSBH = '20030008' AND STR_TO_DATE('2025-08-06 10:30:22', '%Y-%m-%d %H:%i:%s') BETWEEN STR_TO_DATE(mutual_selection_rule.MENTOR_START_TIME, '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE(mutual_selection_rule.MENTOR_END_TIME, '%Y-%m-%d %H:%i:%s'); ``` --- ## ✅ 额外建议 - **字段类型尽量使用 `DATETIME` 或 `DATE` 类型,而不是字符串** - 如果字段中包含日期但格式不统一,可以先用 `CASE WHEN` 或正则表达式统一格式 - 使用 `CONVERT()` 或 `CAST()` 也可以实现转换 --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值