C# 如何在不使用mysql函数的情况下使每个单词的首字母大写?

C# 如何在不使用mysql函数的情况下使每个单词的首字母大写?,c#,mysql,asp.net-mvc,C#,Mysql,Asp.net Mvc,我在mysql中有这样一个字符串——“我的报告id”。我想删除所有“u”,并使每个单词的首字母大写。最终结果应该是“MyReportId”。在mysql中不使用functions/procs是否可以实现这一点?我不想使用函数/过程,因为以下几个原因: 我没有创建它们的权限 我正在构建的查询应该在很多数据库中使用,我不想在运行查询的每个数据库中创建相同的函数 我已经在互联网上的多个地方看到了很多用相同函数解决问题的方法,但正如我已经写的那样,我不需要函数 我的任务: 基本上,我试图实现的是将mys

我在mysql中有这样一个字符串——“我的报告id”。我想删除所有“u”,并使每个单词的首字母大写。最终结果应该是“MyReportId”。在mysql中不使用functions/procs是否可以实现这一点?我不想使用函数/过程,因为以下几个原因:

  • 我没有创建它们的权限
  • 我正在构建的查询应该在很多数据库中使用,我不想在运行查询的每个数据库中创建相同的函数 我已经在互联网上的多个地方看到了很多用相同函数解决问题的方法,但正如我已经写的那样,我不需要函数

    我的任务: 基本上,我试图实现的是将mysql表解析为ASP.NETMVC的C#模型类。我需要在mysql中创建这个“解析器”,我发现这个解决方案(第二个答案和提供的代码)非常有用- 我从链接中的代码开始,并对其进行了更新,以分析可为null和未签名的类型。我是这样做的:

    SELECT CONCAT('[Table(Name = "myTableName")]') UNION
    SELECT CONCAT('public class ', "myTableName",'{') UNION
    SELECT CONCAT('[Column(Name = "', COLUMN_NAME, '")] \n public ', 
    CASE IS_NULLABLE
        WHEN 'NO' THEN
        CASE WHEN COLUMN_TYPE LIKE '%unsigned%' THEN myTypeNonNullableUnsigned.cSharpType
          ELSE myTypeNonNullable.cSharpType
        END
        WHEN 'YES' THEN
          CASE WHEN COLUMN_TYPE LIKE '%unsigned%' THEN myTypeNullableUnsigned.cSharpType
        ELSE myTypeNullable.cSharpType
        END
    END, ' ',
    CONCAT(UCASE(LEFT(COLUMN_NAME, 1)), SUBSTRING(COLUMN_NAME, 2)),
    ' {get;set;}')
    FROM INFORMATION_SCHEMA.COLUMNS c
    JOIN(
    SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
    SELECT 'varchar', 'string' UNION ALL
    SELECT 'datetime', 'DateTime' UNION ALL
    SELECT 'text', 'string' UNION ALL
    SELECT 'tinyint', 'bool' UNION ALL
    SELECT 'int', 'int' UNION ALL   
    SELECT 'longtext', 'string' 
    ) myTypeNonNullable ON c.DATA_TYPE LIKE myTypeNonNullable.sqlType
    JOIN( 
    SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
    SELECT 'varchar', 'string' UNION ALL
    SELECT 'datetime', 'DateTime?' UNION ALL
    SELECT 'text', 'string' UNION ALL
    SELECT 'tinyint', 'bool?' UNION ALL
    SELECT 'int', 'int?' UNION ALL  
    SELECT 'longtext', 'string'
    ) myTypeNullable ON c.DATA_TYPE LIKE myTypeNullable.sqlType
    JOIN(
    SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
    SELECT 'varchar', 'string' UNION ALL
    SELECT 'datetime', 'DateTime' UNION ALL
    SELECT 'text', 'string' UNION ALL
    SELECT 'tinyint', 'bool' UNION ALL
    SELECT 'int', 'uint' UNION ALL  
    SELECT 'longtext', 'string' 
    ) myTypeNonNullableUnsigned ON c.DATA_TYPE LIKE myTypeNonNullableUnsigned.sqlType
    JOIN(
    SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
    SELECT 'varchar', 'string' UNION ALL
    SELECT 'datetime', 'DateTime' UNION ALL
    SELECT 'text', 'string' UNION ALL
    SELECT 'tinyint', 'bool' UNION ALL
    SELECT 'int', 'uint?' UNION ALL 
    SELECT 'longtext', 'string' 
    ) myTypeNullableUnsigned ON c.DATA_TYPE LIKE myTypeNullableUnsigned.sqlType
    WHERE TABLE_SCHEMA='myTableSchema' AND TABLE_NAME='myTableName'
    UNION
    SELECT '}';
    
    剩下的唯一一件事就是使属性的名称符合c#命名约定


    也许不太漂亮,但就目前而言,这是我能想到的最好的解决办法。任何帮助都将不胜感激。

    这是一个非常非常丑陋的解决方案,但它在不使用函数的情况下工作得非常好:

    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME, '_a', 'A'), '_b', 'B'), '_c', 'C'), '_d', 'D'), '_e', 'E'), '_f', 'F'), '_g', 'G'), '_h', 'H'), '_i', 'I'), '_j', 'J'), '_k', 'K'), '_l', 'L'), '_m', 'M'), '_n', 'N'), '_o', 'O'), '_p', 'P'), '_q', 'Q'), '_r', 'R'), '_s', 'S'), '_t', 'T'), '_u', 'U'), '_v', 'V'), '_w', 'W'), '_x', 'X'), '_y', 'Y'), '_z', 'Z')
    

    通过这种方式解析字母,可以遵循C#中的标准命名约定。

    为什么不能使用函数?这里有一个完美的答案,谢谢你的回答。我已经看过这个函数了,但是我必须用另一种方式来实现它。看我的问题,我在那里写了一些我不想使用funcs的原因。很遗憾,你真的不能这么做。C#标识符的穷人标题可以用regexp完成,但不幸的是,MySQL中的regexp支持匹配,但不支持替换…因此,即使是这样,您也需要一个函数(在这种情况下,您最好编写一个MAKE_VALID#u IDENTIFIER()UDF。好吧……恐怕您不能(在MySQL中)但是没有理由在编译之前不对生成的C#源文件进行后期处理…Adriano Rapetti,如果我在每个“#”后匹配字母,我会很容易地用mysql标准函数replace()替换它。之后,我已经有了将第一个字母大写的解决方案。还是我错了?