c# datetimepickers 如何在一天内从 8:00 到 22:00 的工作时间内搜索所有订单?
How can I search all orders in working hours in one day from 8:00 till 22:00 c# datetimepickers?
我想在从 08:00 AM 到 22:00 pm 的工作时间内搜索一天内的所有订单,我使用了 2 个 datetimepickers 和 select 今天的日期,但是当我搜索它时它不是显示今天的所有订单,单击搜索按钮时我尝试了以下代码:
private void BtnSearch_Click(object sender, EventArgs e)
{
string sql = @" SELECT [Order_Payments].[order_id] as 'Acc No.'
,order_vat as 'VAT value'
,vat_orders.[total_amount] as 'Total After VAT'
,[Order_Payments].paid_amount as 'Total Paid'
,[remaining_amount]
,vat_orders.order_date AS 'Order Date'
,Customers.CustName as 'Clinic'
FROM [Order_Payments]
inner join vat_orders on [Order_Payments].order_id = vat_orders.ORDER_ID
inner join Customers on [Order_Payments].custid = Customers.CustId
WHERE 1=1 ";
string condition = "";
string orderby = "";
orderby += " ORDER BY Order_Payments.order_id";
DateTime fromDate;
DateTime toDate;
if (!DateTime.TryParse(dtFromDate.Value.ToString(), out fromDate))
{
System.Windows.Forms.MessageBox.Show("Invalid From Date");
}
else if (!DateTime.TryParse(dtToDate.Value.ToString(), out toDate))
{
System.Windows.Forms.MessageBox.Show("Invalid to Date");
}
else
{
condition += " and vat_orders.order_date between '" + fromDate + "' and '" + toDate + "'";
}
if (textCustId.Text != "")
{
condition += " and Order_Payments.CUSTID ='" + textCustId.Text + "'";
}
DataTable dt = data.fireDatatable(string.Format(sql + condition + orderby));
OrdersDataGridView.DataSource = dt;
OrdersDataGridView.Refresh();
}
我如何更新我的代码并搜索例如今天的订单 1/12/2020 08:00 上午到 1/12/2020 到 22:00 下午?
或者我可以使用 select 语句来完成今天的 select 日期然后 select 从时间 00:00 到 22:00 从 [=29] =]服务器?
您需要将 DateTime 对象转换为 SQL 可以使用的字符串表示形式,最好是
condition += " and vat_orders.order_date between '" + fromDate.ToString("o") + "' and '" + toDate.ToString("o") + "'";
可以参考文档here
您可以参考另一个 question 了解为什么使用 "o"(ISO 8601 格式)
您可以使用 CAST 函数解决您的问题,您可以在 select 语句的 where 子句中仅调用日期或仅调用时间:
这个 link 解释转换函数 https://www.w3schools.com/sql/func_sqlserver_cast.asp
private void BtnSearch_Click(object sender, EventArgs e)
{
string sql = @" SELECT [Order_Payments].[order_id] as 'Acc No.'
,order_vat as 'VAT value'
,vat_orders.[total_amount] as 'Total After VAT'
,[Order_Payments].paid_amount as 'Total Paid'
,[remaining_amount]
,vat_orders.order_date
,Customers.CustName as 'Clinic'
FROM [Order_Payments]
inner join vat_orders on [Order_Payments].order_id = vat_orders.ORDER_ID
inner join Customers on [Order_Payments].custid = Customers.CustId
WHERE cast(vat_orders.order_date as time) between '01:00:00' and '23:50:50' ";
string condition = "";
string orderby = "";
orderby += " ORDER BY Order_Payments.order_id";
DateTime fromDate;
DateTime toDate;
if (!DateTime.TryParse(dtFromDate.Value.ToString(), out fromDate))
{
System.Windows.Forms.MessageBox.Show("Invalid From Date");
}
else if (!DateTime.TryParse(dtToDate.Value.ToString(), out toDate))
{
System.Windows.Forms.MessageBox.Show("Invalid to Date");
}
else
{
condition += " and cast(vat_orders.order_date as date) between '" + fromDate + "' and '" + toDate + "'";
}
if (textCustId.Text != "")
{
condition += " and Order_Payments.CUSTID ='" + textCustId.Text + "'";
}
DataTable dt = data.fireDatatable(string.Format(sql + condition + orderby));
OrdersDataGridView.DataSource = dt;
OrdersDataGridView.Refresh();
}
我想在从 08:00 AM 到 22:00 pm 的工作时间内搜索一天内的所有订单,我使用了 2 个 datetimepickers 和 select 今天的日期,但是当我搜索它时它不是显示今天的所有订单,单击搜索按钮时我尝试了以下代码:
private void BtnSearch_Click(object sender, EventArgs e)
{
string sql = @" SELECT [Order_Payments].[order_id] as 'Acc No.'
,order_vat as 'VAT value'
,vat_orders.[total_amount] as 'Total After VAT'
,[Order_Payments].paid_amount as 'Total Paid'
,[remaining_amount]
,vat_orders.order_date AS 'Order Date'
,Customers.CustName as 'Clinic'
FROM [Order_Payments]
inner join vat_orders on [Order_Payments].order_id = vat_orders.ORDER_ID
inner join Customers on [Order_Payments].custid = Customers.CustId
WHERE 1=1 ";
string condition = "";
string orderby = "";
orderby += " ORDER BY Order_Payments.order_id";
DateTime fromDate;
DateTime toDate;
if (!DateTime.TryParse(dtFromDate.Value.ToString(), out fromDate))
{
System.Windows.Forms.MessageBox.Show("Invalid From Date");
}
else if (!DateTime.TryParse(dtToDate.Value.ToString(), out toDate))
{
System.Windows.Forms.MessageBox.Show("Invalid to Date");
}
else
{
condition += " and vat_orders.order_date between '" + fromDate + "' and '" + toDate + "'";
}
if (textCustId.Text != "")
{
condition += " and Order_Payments.CUSTID ='" + textCustId.Text + "'";
}
DataTable dt = data.fireDatatable(string.Format(sql + condition + orderby));
OrdersDataGridView.DataSource = dt;
OrdersDataGridView.Refresh();
}
我如何更新我的代码并搜索例如今天的订单 1/12/2020 08:00 上午到 1/12/2020 到 22:00 下午?
或者我可以使用 select 语句来完成今天的 select 日期然后 select 从时间 00:00 到 22:00 从 [=29] =]服务器?
您需要将 DateTime 对象转换为 SQL 可以使用的字符串表示形式,最好是
condition += " and vat_orders.order_date between '" + fromDate.ToString("o") + "' and '" + toDate.ToString("o") + "'";
可以参考文档here
您可以参考另一个 question 了解为什么使用 "o"(ISO 8601 格式)
您可以使用 CAST 函数解决您的问题,您可以在 select 语句的 where 子句中仅调用日期或仅调用时间: 这个 link 解释转换函数 https://www.w3schools.com/sql/func_sqlserver_cast.asp
private void BtnSearch_Click(object sender, EventArgs e)
{
string sql = @" SELECT [Order_Payments].[order_id] as 'Acc No.'
,order_vat as 'VAT value'
,vat_orders.[total_amount] as 'Total After VAT'
,[Order_Payments].paid_amount as 'Total Paid'
,[remaining_amount]
,vat_orders.order_date
,Customers.CustName as 'Clinic'
FROM [Order_Payments]
inner join vat_orders on [Order_Payments].order_id = vat_orders.ORDER_ID
inner join Customers on [Order_Payments].custid = Customers.CustId
WHERE cast(vat_orders.order_date as time) between '01:00:00' and '23:50:50' ";
string condition = "";
string orderby = "";
orderby += " ORDER BY Order_Payments.order_id";
DateTime fromDate;
DateTime toDate;
if (!DateTime.TryParse(dtFromDate.Value.ToString(), out fromDate))
{
System.Windows.Forms.MessageBox.Show("Invalid From Date");
}
else if (!DateTime.TryParse(dtToDate.Value.ToString(), out toDate))
{
System.Windows.Forms.MessageBox.Show("Invalid to Date");
}
else
{
condition += " and cast(vat_orders.order_date as date) between '" + fromDate + "' and '" + toDate + "'";
}
if (textCustId.Text != "")
{
condition += " and Order_Payments.CUSTID ='" + textCustId.Text + "'";
}
DataTable dt = data.fireDatatable(string.Format(sql + condition + orderby));
OrdersDataGridView.DataSource = dt;
OrdersDataGridView.Refresh();
}