【问题标题】:Padding 0's - MySQL填充 0 - MySQL
【发布时间】:2012-10-12 13:03:27
【问题描述】:

所以,我有一列是我的键列和自动增量,所以它不能是 varchar 或任何有趣的东西。

请不要使用“Erhmahgerd urse werb contrerls”,因为我喜欢控制自己的 HTML 流,不喜欢将其交给 .NET。我从来没有很好的经验(而且我喜欢我的代码是合规的)。我不希望这是一场火焰战争或任何事情 - 我只想用零填充。我觉得有必要这么说,因为它以前发生过太多次了。

所以,无论如何。

DataTable tabledata = new DataTable();  
using (OdbcConnection con = new OdbcConnection(conString)) {
    using (OdbcCommand com = new OdbcCommand("SELECT * FROM equipment_table", con)) {
        OdbcDataAdapter myAdapter = new OdbcDataAdapter();
        myAdapter.SelectCommand = com;
        try {
            con.Open();
            myAdapter.Fill(tabledata);
        } catch (Exception ex) {
            throw (ex);
        } finally {
            con.Close();
        }
    }
}
Response.Write("<table id=\"equipment_listtable\"><thead><tr><th>Equipment ID</th><th>Equipment Name</th><th>Equipment Description</th><th>Type</th><th>In Use?</th><th>iOS Version (if applicable)</th><th>Permission Level</th><th>Status</th><th>Asset Tag</th><th>Details</th><th>Change</th><th>Apply</th></tr></thead>");
foreach (DataRow row in tabledata.Rows) {
    int counter = (int)row["Equipment_ID"];
    Response.Write("<tr>");
    foreach (var item in row.ItemArray) {
        Response.Write("<td>" + item + "</td>");
    }
    Response.Write("This stuff is irrelevant to my problem, so it is being left out... It uses counter though, so no complaining about not using variables...");
}
Response.Write("</table>");

你可以想象,我的键列的值在生成的表中是这样出来的:

1
10
11
12
13
14
15
16
17
18
19
20
2
21

等等。我想用 0 填充来解决这个问题。做这个的最好方式是什么?有没有办法在生成表格时定位特定字段?我研究过 DataRow.Item,但我总是发现 MSDN 文档有点难以理解。

或者,我可以选择 * 然后在 * 中的一个特定字段上使用 mysql 的 lpad 吗?

谢谢!

【问题讨论】:

  • 如果表中的列是数字,那么 order by 子句应该正确地排序,而不是像您显示的那样按字母顺序排列。

标签: c# mysql select datatable zero-pad


【解决方案1】:

SELECT * 通常不是一个好主意。它不可避免地会导致比编写查询节省的时间更多的问题。
这将允许您在列上使用 LPAD。

我正要建议使用类似的东西:
Response.Write("" + item.ToString.PadLeft(2, '0')+ "");

但是由于您只是循环每个项目并以相同的方式呈现它们,因此上述内容会填充每个单元格。

所以我认为您最好的选择是更改您的查询以指定每一列。然后,您可以根据需要填充该字段。
或者,如果您只担心它们的排序不正确(即,作为字符而不是整数排序),则使用 ORDER BY。

或者,为从数据库中读取的每个单元格创建一个变量并分别渲染每个单元格。 如果您需要,这将为您提供更多自定义选项。

【讨论】:

    【解决方案2】:

    您确实应该始终明确指定您的列名,并且无论如何都不要使用 * - 请参阅 here

    如果您坚持使用 *,那么只需将填充值作为另一个字段带入:

    SELECT *,LPAD("Equipment_ID", 2, '0') as Equipment_ID_Padded FROM equipment_table
    

    请记住,如果您的 Equipment_ID 超过 2 位,LPAD 将被截断。

    更好的解决方案可能是使用 String.FormatToString("D2"); 填充代码中的值

    string paddedString = string.Format("{0:d2}", (int)row["Equipment_ID"]));
    

    【讨论】:

      【解决方案3】:

      您可以在 C# 中使用 .ToString("D" + number ofleading zeros); 添加填充。 例如。如果 counter = 34 并且你调用 counter.ToString("D5"),你会得到 00034。

      如果您使用的是字符串,最简单的方法是 convert.toInt32() 然后应用上述内容。

      如果您想继续使用字符串,只需查看 --printf whups wrong language-- String.Format。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 2013-10-07
        • 2011-09-09
        • 1970-01-01
        • 2018-01-14
        • 2013-07-14
        • 2017-09-22
        相关资源
        最近更新 更多