2

我相信我的编码有问题。我猜它不是按日期过滤的。请帮忙

SQL 代码:

SELECT
   CONVERT(char(80), i.InvDate,3) AS InvDate,
   i.InvoiceNo,
   i.EmployerCode,
   i.TaxAmount + i.SubTotal AS Amount,
   '' AS Payment,
   pd.GivenName
FROM
   dbo.Invoice i
INNER JOIN 
   dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID)

C#代码:

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
    i.InvoiceNo,
    i.EmployerCode,
    i.TaxAmount + i.SubTotal AS Amount,
    '' AS Payment,
    pd.GivenName 
FROM
    dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE (InvDate >= CONVERT(datetime, '" + dtpFrom.Text + "', 105 )) 
    AND (InvDate <= CONVERT(datetime, '" + dtpTo.Text + "', 105))," , objConn);

这就是我想要实现的目标:

在此处输入图像描述

这就是我得到的:

在此处输入图像描述

在我被踢出这里之前。我会做一些编辑。

编辑:

日期时间为 105 格式 (dd-mm-yyyy)

WHERE (InvDate >= CONVERT(datetime, '" + dtpFrom.Text + "', 105 )) 
AND (InvDate <= CONVERT(datetime, '" + dtpTo.Text + "', 105))

这应该从特定日期中选择。例如:2012 年 10 月 11 日至 2012 年 10 月 15 日。

即使没有 DateTimepicker,输出也不会显示“GivenName”

4

2 回答 2

1

最好的方法是将您的输入格式化为 dd/ MMM /yyyy 格式。它更好地帮助 SqlServer 识别月份和日期。我强烈建议您在与 SqlServer 通信时使用 MMM 格式。

DateTime fromDate, toDate;
fromDate = DateTime.Parse(dtpFrom.Text);
toDate = DateTime.Parse(dtpTo.Text);

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
i.InvoiceNo,
i.EmployerCode,
i.TaxAmount + i.SubTotal AS Amount,
'' AS Payment,
pd.GivenName 
FROM    dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE datediff(d, '" + fromDate.ToString("dd/MMM/yyyy") + "', i.InvDate) >=0  
AND datediff(d, '" + toDate.ToString("dd/MMM/yyyy") + "', i.InvDate) <=0", objConn);

或者如果您有任何如上所述的限制,请使用 CONVERT() 转换输入

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
i.InvoiceNo,
i.EmployerCode,
i.TaxAmount + i.SubTotal AS Amount,
'' AS Payment,
pd.GivenName 
FROM    dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE datediff(d, CONVERT(datetime, '" + dtpFrom.Text + "', 105 ), i.InvDate) >=0  
AND datediff(d, CONVERT(datetime, '" + dtpTo.Text + "', 105 ), i.InvDate) <=0", objConn);
于 2012-10-15T06:58:12.357 回答
-1

问题是由于类型 date 到 char 的转换,过滤可能无法按预期工作。尝试使用 datediff,它可以解决问题。

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
i.InvoiceNo,
i.EmployerCode,
i.TaxAmount + i.SubTotal AS Amount,
'' AS Payment,
pd.GivenName 
FROM    dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE datediff(d, '" + dtpFrom.Text + "', i.InvDate) >=0  
AND datediff(d, '" + dtpTo.Text + "', i.InvDate) <=0", objConn);
于 2012-10-11T05:39:16.353 回答