【问题标题】:My working hours cannot work due to my syntax from database由于数据库中的语法,我的工作时间无法正常工作
【发布时间】:2019-01-20 12:56:20
【问题描述】:

我真的对这种语法感到困惑。我想输入输出来计算总工作时间,但它不起作用。

这是我的代码:

  con.Open();
        MySqlDataAdapter sda = new MySqlDataAdapter("Select name , logdate as 'Date' , min(logtime) as 'IN', max(logtime) as 'OUT'," +
            "CAST(((strftime('%s', max(logtime) ) - strftime('%s', min(logtime) )) % (60 * 60 * 24)) / (60 * 60) AS TEXT) || ':' || " +
            "CAST((((strftime('%s', max(logtime) ) - strftime('%s' , min(logtime) )) % (60 * 60 * 24)) % (60 * 60)) / 60 AS TEXT) as 'workHrs' " +
            "from Attendance1 group by name, logdate order by logdate", con);
        DataTable data = new DataTable();
        sda.Fill(data);
        dataGridView1.DataSource = data;
        con.Close();

【问题讨论】:

  • 为了将来参考,我们非常希望您将错误消息的文本放在问题中,而不是屏幕截图。
  • in the local host ? 基本上,这几乎肯定不是 C# 问题。这是一个 SQL 问题。除非您已验证它已在 MySQL Workbench 中运行,否则尝试在 C# 中运行 SQL 是没有意义的。
  • strftime ... 应该不是 mysql 函数和 ||不使用(通常)但 concat .. 正在混合 sqlite 函数??

标签: c# mysql database


【解决方案1】:

您的查询包含以下内容:

CAST(some expression AS TEXT) || ':' || CAST(another expression AS TEXT)

|| 是Oracle 字符串连接。在 MySQL 中使用 CONCAT()

如果您仔细查看错误消息,您会发现 MySQL 在 || 附近出现问题。

您似乎正在尝试使用strftime() 进行时间算术。但是strftime() 不是 C# 或 MySQL 的一部分。您似乎想知道两个TIMEMAX(logtime)MIN(logtime) 之间经过的时间。

你想要的

  TIMEDIFF(MAX(logtime), MIN(logtime))

并将结果格式化为您想要的1:59

  DATE_FORMAT(TIMEDIFF(MAX(logtime), MIN(logtime)), '%k:%i')

专业提示:将此页面添加到字符串函数的书签:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat

并在日期/时间函数上将此页面添加为书签:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format

【讨论】:

  • 对不起,我不熟悉这种语法,因为我只是编码新手,我只是在尝试,但好的,我会读到的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多