C# Teradata字符比较
在C应用程序中,我有一个从Teradata表填充的DataTable。 teradata表数据如下所示:C# Teradata字符比较,c#,sql,teradata,C#,Sql,Teradata,在C应用程序中,我有一个从Teradata表填充的DataTable。 teradata表数据如下所示: UnitNum UnitName ------- -------- 123456 Location A1 - 123456 123456 Location B1 - 123456 UnitNum UnitName ------- -------- 123456 Location A1 / B1 - 123456 我想创建如下输出: UnitNum UnitName -------
UnitNum UnitName
------- --------
123456 Location A1 - 123456
123456 Location B1 - 123456
UnitNum UnitName
------- --------
123456 Location A1 / B1 - 123456
我想创建如下输出:
UnitNum UnitName
------- --------
123456 Location A1 - 123456
123456 Location B1 - 123456
UnitNum UnitName
------- --------
123456 Location A1 / B1 - 123456
我用以下代码在C中完成了这项工作:
string compSql2 = "SELECT UnitNum ,
UPPER(MAX((CASE a.RNK WHEN 1 THEN a.UnitName ELSE NULL END))) Location1,
UPPER(MAX((CASE a.RNK WHEN 2 THEN a.UnitName ELSE NULL END))) Location2
FROM (SELECT UnitNum , UnitName, RANK(UnitName) AS RNK
FROM idw_app_field_sync.compressor_list GROUP BY UnitNum) AS a
GROUP BY 1";
DataTable compdt = TeradataConnector.RunQuery(compSql2);
compdt.Columns.Add("UnitName");
for (int i = 0; i < compdt.Rows.Count; i++)
{
if (compdt.Rows[i].Field<string>("Location2") != null)
{
string loc1 = compdt.Rows[i].Field<string>("Location1");
string loc2 = compdt.Rows[i].Field<string>("Location2");
string unitname;
for (int j = 0; j < loc1.Length - 9; j++)
{
if (!loc2[j].Equals(loc1[j]))
{
unitname = loc2.Substring(0, loc2.Length - 9) + @" / " + loc1.Substring(j);
compdt.Rows[i].SetField<string>("UnitName", unitname);
}
}
}
else
{
compdt.Rows[i].SetField<string>("UnitName", compdt.Rows[i].Field<string>("Location1"));
}
}
如果可能的话,我想用TeradataSQL来完成这项工作。但是,我不知道如何将字符串的字符与SQL进行比较,就像我对C所做的那样。基于SELECT,每个UnitNum似乎只有两行,最后九个字符总是相同的。还有其他规定吗?位置名称总是一个单词还是有空格?位置名称可以有空格。对于共享一个UnitNum的两个,位置名称的第一部分也将相同。我忘了问:您的Teradata版本是什么?Teradata版本14.1