组态王7.5 sqlselect选择失败

记得有一次,在一家小公司,我负责组态王7 .5 项目,这是自动化控制系统的核心。
项目进行到一半的时候,我突然头疼了:使用SQLSelect函数选择数据失败。
一开始我以为数据库连接有问题,于是打开系统服务管理器进行检查。
当然,MySQL服务没有启动。
手动启动后,问题依旧。
我尝试使用Navicat连接数据库,发现连接成功,这让我很困惑。
然后,我开始检查SQL语句,发现表名没有用反引号括起来。
我修改了一下,还是不行。
这时我突然想到,是不是权限配置有问题?我检查了数据库用户权限,果然SELECT权限被限制了。
解决权限问题后,一切正常。
这件事让我明白,解决问题有时需要多角度思考。
等等,还有别的事。
我突然想到,如果组态王和数据库版本不兼容,也可能会导致这个问题。

数据库中日期只取年月日

嘿,数据库日期的事情真的很烦人。
就用SQL函数按年月日提取出来就可以了,但是数据库不一样,写法不是很有趣。
核心思想是裁剪或格式化日期和时间。

1 .如何做一个普通的数据库
1 . Oracle和大盟使用TO_CHAR函数
例如Oracle写入方法: SELECT TO_CHAR(hire_date, 'yyyy-mm-dd') US 年月日 FROM dmhr.employee;
这意味着指定“yyyy-mm-dd”格式模板将日期和时间转换为字符串。
例如,如果员工的入职日期是 2 02 3 -05 -1 5 08 :3 0,使用此函数,它将是“2 02 3 -05 -1 5 ”。

2 Oracle和达盟使用TRUNC函数
写法: SELECT TRUNC(hire_date, 'dd') AS 年月日 FROM dmhr.employee;
该函数直接将日期和时间截成天,返回的日期、时、分、秒类型为00:00:00。
例如,也是在 1 5 -05 -2 02 3 08 :3 0。
使用 TRUNC,则变为 2 02 3 -05 -1 5
3 PostgreSQL和MySQL使用CAST函数
PostgreSQL写法: SELECT Hire_date::date US 年月日 FROM mytable;
MySQL写法:SELECT DATE(hire_date) US 年月日 FROM mytable;
这里直接将日期和时间转换为日期类型,时间部分丢失。
例如1 5 -05 -2 02 3 08 :3 0,转账完成后即为1 5 -05 -2 02 3
2 特殊情况的处理
1 .将时间戳转换为日期
大盟数据库:SELECT TRUNC(SYSTIMESTAMP, 'dd') AS 年月日 FROM DUAL;
PostgreSQL:选择 CURRENT_TIMESTAMP::美国日期年月日;
例如当前系统时间为2 02 3 -05 -1 6 1 0:00,使用该函数可以得到2 02 3 -05 -1 6
2 自定义格式输出
SQLServer: SELECT CONVERT(varchar(1 0), GETDATE(), 1 2 0) 美国年、月、日; 下面的
1 2 0是格式代码,对应yyyy-mm-dd。
例如,如果当前系统时间是 2 02 3 -05 -1 6 1 0:00,则使用此函数也将是“2 02 3 -05 -1 6 ”。

3 注意事项
1 .注意数据类型
TRUNC 返回日期类型,TO_CHAR 返回字符串类型。
你必须根据你的需要来选择。
例如,如果您想在查询条件中使用它,您可能需要使用 TRUNC。

2 注意时区
例如,使用SYSTIMESTAMP等函数时,需要检查系统时区设置,否则日期可能会错误。
我以前也遇到过问题。
有一次查数据,发现日期少了一天。
然后我发现时区不对。

3 性能优化注意事项
如果在日期字段上使用函数,索引可能会无效。
例如,如果直接使用TRUNC(hire_date),查询速度可能会很慢。
我在之前的项目中遇到过这个问题,然后将其重写为 Hire_date BETWEEN '2 02 5 -01 -01 ' AND '2 02 5 -01 -01 2 3 :5 9 :5 9 ' ,立刻就快了。

老实说,当涉及到数据库时,你只需要进行一些尝试即可。
你应该先尝试几种方法,看看哪一种满足你的需求,然后再考虑性能等。
当时我不明白为什么TRUNC会影响索引,直到查了官方文档才明白。

SQL 日期函数如何获取季度?

MySQL:QUARTER() 函数直接提取季度。
示例:选择季度('2 02 4 -05 -1 5 '); --后2 (第二节) 定义 QUARTER(order_date) 为订单的四分之一;
SQL Server:DATEPART() 函数,参数指定为季度或 qq。
示例: SELECT DATEPART(quarter, '2 02 4 -05 -1 5 '); --返回2 SELECT DATEPART(qq, order_date) as QUARTERFROM;
PostgreSQL、Oracle、SQLite:函数EXTRACT(),参数定义为QUARTERFROM。
示例: SELECT EXTRACT(QUARTER FROM DATE '2 02 4 -05 -1 5 '); --返回2 选择摘录(订单历史记录季度)作为订单季度;
注意: 1 、日期合法性:传递给函数的值必须是合法的日期类型,否则会出现NULL或者报错。
2 、数据库兼容性:不同的数据库有不同的函数名称和参数,应根据实际数据库确定相应的公式。
3 、提高性能:对日期字段创建索引,提高提取效率。

扩展应用: 1 、按季度统计: MySQL 示例:SELECT QUARTER(order_date) ASquarter, COUNT() AS order_count FROM 命令 GROUP BY Quarter; SQL Server 示例: SELECT DATEPART(Quarter, order_date) AS Quarter, SUM(amount) AS Total_amount FROM sales GROUP BY DATEPART(Quarter, order_date); PostgreSQL 示例:SELECT EXTRACT(QUARTER FROM order_date) AS Quarterly, AVG( rating) AS avg_erated FROM review GROUP BY Quarter;
2 .动态计算当前季度: MySQL 示例:SELECT QUARTER(CURDATE()) AScurrent_quart; SQL Server 示例: SELECT DATEPART(Quarter, GETDATE()) AS current_quart; PostgreSQL示例: SELECT EXTRACT(QUARTER FROM CURRENT_DATE) AS current_quarter;
提取日期对应的季度,以便灵活分析数据并生成报告。

SQL 日期函数如何获取星期几?

说白了,不同的数据库有不同的工作日获取功能。

MySQL 使用 DAYNAME(date) 获取全名,使用 WEEKDAY(date) 获取数字(0=星期一)。
SQL Server 使用 DATENAME(weekday,date) 获取全名,使用 DATEPART(weekday,date) 获取数字(1 =星期日)。
PostgreSQL 使用 TO_CHAR(date,'D') 获取全名,使用 TO_CHAR(date,'D') 获取数字(1 =星期日)。
Oracle 使用 TO_CHAR(date,'DAY') 获取全名,使用 TO_CHAR(date,'DY') 获取缩写(大写)名称。

注意: MySQL 的 WEEKDAY() 星期日是 6 点。
完整的 PostgreSQL/Oracle 名称可能包含空格,因此必须使用 TRIM。
Oracle也支持中文,如何设置你得查看文档。

您使用哪个数据库?先试试吧。