{"id":319466,"date":"2024-01-21T13:00:34","date_gmt":"2024-01-21T05:00:34","guid":{"rendered":"https:\/\/www.idc.net\/help\/319466\/"},"modified":"2024-01-21T13:00:34","modified_gmt":"2024-01-21T05:00:34","slug":"sql%e4%b8%ad%e8%bf%94%e5%9b%9e%e8%ae%a1%e7%ae%97%e8%a1%a8%e8%be%be%e5%bc%8f%e7%9a%84%e5%87%bd%e6%95%b0","status":"publish","type":"post","link":"https:\/\/idc.net\/help\/319466\/","title":{"rendered":"SQL\u4e2d\u8fd4\u56de\u8ba1\u7b97\u8868\u8fbe\u5f0f\u7684\u51fd\u6570"},"content":{"rendered":"<p>\u4e0b\u9762\u4e3a\u60a8\u4ecb\u7ecd\u4e00\u4e2aSQL\u4e2d\u8fd4\u56de\u8ba1\u7b97\u8868\u8fbe\u5f0f\u7684\u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ef\u4ee5\u8ba1\u7b97\u52a0\u3001\u51cf\u3001\u4e58\u3001\u9664\uff0c\u4f46\u662f\u4e0d\u80fd\u7b97\u5e42\uff0c\u4f9b\u60a8\u53c2\u8003\uff0c\u5e0c\u671b\u5bf9\u60a8\u5b66\u4e60SQL\u4e2d\u7684\u51fd\u6570\u80fd\u6709\u6709\u6240\u5e2e\u52a9\u3002<\/p>\n<p>&nbsp;<\/p>\n<pre>\n \n \n <ol>\n  \n  \n  <li><span><span>CREATE&nbsp;FUNCTION&nbsp;dbo.GetExp(@pstrExpress&nbsp;AS&nbsp;VARCHAR(8000)) &nbsp;<\/span><\/span><\/li>\n  \n  \n  <li><span>RETURNS&nbsp;DECIMAL(18,6)&nbsp;AS &nbsp;<\/span><\/li>\n  \n  \n  <li><span>BEGIN &nbsp;<\/span><\/li>\n  \n  \n  <li><span>DECLARE&nbsp;@i&nbsp;INT,@j&nbsp;INT&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>DECLARE&nbsp;@c1&nbsp;CHAR(1),@c2&nbsp;CHAR(1),@c&nbsp;VARCHAR(100) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>DECLARE&nbsp;@v1&nbsp;DECIMAL(18,6),@v2&nbsp;DECIMAL(18,6),@v&nbsp;DECIMAL(18,6) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>DECLARE&nbsp;@t&nbsp;TABLE(ID&nbsp;INT&nbsp;IDENTITY(1,1),s&nbsp;VARCHAR(100)) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>DECLARE&nbsp;@s&nbsp;TABLE(ID&nbsp;INT&nbsp;IDENTITY(1,1),s&nbsp;VARCHAR(100)) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>DECLARE&nbsp;@sv&nbsp;TABLE(ID&nbsp;INT&nbsp;IDENTITY(1,1),v&nbsp;DECIMAL(18,6)) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;<\/span><\/li>\n  \n  \n  <li><span>SET&nbsp;@<\/span><span>pstrExpress<\/span><span>&nbsp;=&nbsp;<\/span><span>REPLACE<\/span><span>(@pstrExpress,'&nbsp;','') &nbsp;<\/span><\/li>\n  \n  \n  <li><span>SELECT&nbsp;@<\/span><span>i<\/span><span>&nbsp;=&nbsp;<\/span><span>0<\/span><span>,@<\/span><span>j<\/span><span>&nbsp;=&nbsp;<\/span><span>LEN<\/span><span>(@pstrExpress),@<\/span><span>c2<\/span><span>&nbsp;=&nbsp;<\/span><span>''<\/span><span>,@<\/span><span>c<\/span><span>&nbsp;=&nbsp;<\/span><span>''<\/span><span>&nbsp;<\/span><\/li>\n  \n  \n  <li><span>WHILE&nbsp;@i<\/span><span>&lt;<\/span><span>@j &nbsp;<\/span><\/li>\n  \n  \n  <li><span>BEGIN &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;SELECT&nbsp;@<\/span><span>c1<\/span><span>&nbsp;=&nbsp;@c2,@<\/span><span>i<\/span><span>&nbsp;=&nbsp;@i+1 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;SELECT&nbsp;@<\/span><span>c2<\/span><span>&nbsp;=&nbsp;<\/span><span>SUBSTRING<\/span><span>(@pstrExpress,@i,1) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;CHARINDEX(@c2,'.0123456789')&nbsp;<\/span><span>&gt;<\/span><span>&nbsp;0&nbsp;or&nbsp;(@<\/span><span>c2<\/span><span>&nbsp;=&nbsp;<\/span><span>'-'<\/span><span>&nbsp;and&nbsp;@c1&nbsp;IN('','*','-','+','\/','(')) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;BEGIN&nbsp;&nbsp;&nbsp;SELECT&nbsp;@<\/span><span>c<\/span><span>&nbsp;=&nbsp;@c&nbsp;+&nbsp;@c2&nbsp;&nbsp;&nbsp;CONTINUE&nbsp;&nbsp;END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;@c&nbsp;<\/span><span>&lt;<\/span><span>&gt;<\/span><span>&nbsp;''&nbsp;&nbsp;BEGIN&nbsp;INSERT&nbsp;@t(s)&nbsp;&nbsp;SELECT&nbsp;@c&nbsp;SELECT&nbsp;@<\/span><span>c<\/span><span>&nbsp;=&nbsp;<\/span><span>''<\/span><span>&nbsp;END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;CHARINDEX(@c2,')')<\/span><span>&gt;<\/span><span>0 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;BEGIN&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;INSERT&nbsp;@t(s)&nbsp;&nbsp;SELECT&nbsp;s&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;ID&nbsp;<\/span><span>&gt;<\/span><span>&nbsp;ISNULL((SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;s&nbsp;IN('(')),0)&nbsp;ORDER&nbsp;BY&nbsp;ID&nbsp;DESC &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;DELETE&nbsp;@s&nbsp;WHERE&nbsp;ID&nbsp;<\/span><span>&gt;<\/span><span>=&nbsp;ISNULL((SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;s&nbsp;IN('(')),0)&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;CONTINUE &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;CHARINDEX(@c2,'+-)')<\/span><span>&gt;<\/span><span>0 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;BEGIN&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;INSERT&nbsp;@t(s)&nbsp;&nbsp;SELECT&nbsp;s&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;ID&nbsp;<\/span><span>&gt;<\/span><span>&nbsp;ISNULL((SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;s&nbsp;IN('(')),0)&nbsp;ORDER&nbsp;BY&nbsp;ID&nbsp;DESC &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;DELETE&nbsp;@s&nbsp;WHERE&nbsp;ID&nbsp;<\/span><span>&gt;<\/span><span>&nbsp;ISNULL((SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;s&nbsp;IN('(')),0)&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;IF&nbsp;@c2&nbsp;<\/span><span>&lt;<\/span><span>&gt;<\/span><span>&nbsp;')'&nbsp;INSERT&nbsp;@s(s)&nbsp;SELECT&nbsp;@c2 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;CONTINUE &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;CHARINDEX(@c2,'*\/')<\/span><span>&gt;<\/span><span>0 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;BEGIN&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;INSERT&nbsp;@t(s)&nbsp;&nbsp;SELECT&nbsp;s&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;ID&nbsp;<\/span><span>&gt;<\/span><span>&nbsp;ISNULL((SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;s&nbsp;IN('(','+','-')),0)&nbsp;ORDER&nbsp;BY&nbsp;ID&nbsp;DESC &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;DELETE&nbsp;@s&nbsp;WHERE&nbsp;ID&nbsp;<\/span><span>&gt;<\/span><span>&nbsp;ISNULL((SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@s&nbsp;WHERE&nbsp;s&nbsp;IN('(','+','-')),0)&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;INSERT&nbsp;&nbsp;@s&nbsp;SELECT&nbsp;@c2 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;CONTINUE &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;CHARINDEX(@c2,'(')<\/span><span>&gt;<\/span><span>0&nbsp;INSERT&nbsp;&nbsp;@s&nbsp;SELECT&nbsp;@c2 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>IF&nbsp;@c&nbsp;<\/span><span>&lt;<\/span><span>&gt;<\/span><span>&nbsp;''&nbsp;INSERT&nbsp;@t(s)&nbsp;SELECT&nbsp;@c &nbsp;<\/span><\/li>\n  \n  \n  <li><span>INSERT&nbsp;@t(s)&nbsp;&nbsp;SELECT&nbsp;s&nbsp;FROM&nbsp;@s&nbsp;ORDER&nbsp;BY&nbsp;ID&nbsp;DESC &nbsp;<\/span><\/li>\n  \n  \n  <li><span>SELECT&nbsp;@<\/span><span>i<\/span><span>&nbsp;=&nbsp;<\/span><span>0<\/span><span>,@<\/span><span>j<\/span><span>&nbsp;=&nbsp;<\/span><span>MAX<\/span><span>(ID)&nbsp;FROM&nbsp;@t&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>WHILE&nbsp;@i&nbsp;<\/span><span>&lt;<\/span><span>&nbsp;@j &nbsp;<\/span><\/li>\n  \n  \n  <li><span>BEGIN&nbsp; &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;SELECT&nbsp;@<\/span><span>i<\/span><span>&nbsp;=&nbsp;@i&nbsp;+&nbsp;1 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;SELECT&nbsp;@<\/span><span>c<\/span><span>&nbsp;=&nbsp;<\/span><span>s<\/span><span>&nbsp;FROM&nbsp;@t&nbsp;WHERE&nbsp;<\/span><span>ID<\/span><span>&nbsp;=&nbsp;@i &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;@<\/span><span>c<\/span><span>&nbsp;=&nbsp;<\/span><span>'('<\/span><span>&nbsp;CONTINUE &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;IF&nbsp;@c&nbsp;NOT&nbsp;IN('*','-','+','\/')&nbsp;&nbsp;BEGIN&nbsp;&nbsp;INSERT&nbsp;@sv(v)&nbsp;SELECT&nbsp;CONVERT(float,@c)&nbsp;CONTINUE&nbsp;END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;SELECT&nbsp;@<\/span><span>v<\/span><span>v2<\/span><span>&nbsp;=&nbsp;v&nbsp;FROM&nbsp;@sv&nbsp;&nbsp;DELETE&nbsp;@sv&nbsp;&nbsp;WHERE&nbsp;<\/span><span>ID<\/span><span>&nbsp;=&nbsp;(SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@sv) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;SELECT&nbsp;@<\/span><span>v<\/span><span>v1<\/span><span>&nbsp;=&nbsp;v&nbsp;FROM&nbsp;@sv&nbsp;&nbsp;DELETE&nbsp;@sv&nbsp;&nbsp;WHERE&nbsp;<\/span><span>ID<\/span><span>&nbsp;=&nbsp;(SELECT&nbsp;MAX(ID)&nbsp;FROM&nbsp;@sv) &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;SELECT&nbsp;@<\/span><span>v<\/span><span>&nbsp;=&nbsp;<\/span><span>CASE<\/span><span>&nbsp;@c&nbsp;WHEN&nbsp;'+'&nbsp;THEN&nbsp;@v1&nbsp;+&nbsp;@v2&nbsp;WHEN&nbsp;'-'&nbsp;THEN&nbsp;@v1&nbsp;-&nbsp;@v2 &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN&nbsp;'*'&nbsp;THEN&nbsp;@v1&nbsp;*&nbsp;@v2&nbsp;WHEN&nbsp;'\/'&nbsp;THEN&nbsp;@v1&nbsp;\/&nbsp;@v2&nbsp;END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;INSERT&nbsp;@sv(v)&nbsp;SELECT&nbsp;@v &nbsp;<\/span><\/li>\n  \n  \n  <li><span>END &nbsp;<\/span><\/li>\n  \n  \n  <li><span>SELECT&nbsp;@<\/span><span>v<\/span><span>v<\/span><span>&nbsp;=&nbsp;v&nbsp;FROM&nbsp;@sv &nbsp;<\/span><\/li>\n  \n  \n  <li><span>RETURN&nbsp;@v &nbsp;<\/span><\/li>\n  \n  \n  <li><span>END&nbsp;<\/span><\/li>\n \n \n <\/ol><\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u3010\u7f16\u8f91\u63a8\u8350\u3011<\/p>\n<p>SQL\u4e2dDATENAME\u51fd\u6570\u7684\u7528\u6cd5<\/p>\n<p>SQL\u4e2d\u5faa\u73af\u8bed\u53e5\u7684\u6548\u679c\u5b9e\u4f8b<\/p>\n<p>SQL\u4e2d\u7c7b\u4f3cFor\u5faa\u73af\u5904\u7406\u7684\u5b9e\u4f8b<\/p>\n<p>\u5bf9\u5b58\u50a8\u8fc7\u7a0b\u4ee3\u66ffSQL\u8bed\u53e5\u7684\u8ba8\u8bba<\/p>\n<p>SQL\u805a\u5408\u51fd\u6570\u4e4bAvg \u51fd\u6570<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0b\u9762\u4e3a\u60a8\u4ecb\u7ecd\u4e00\u4e2aSQL\u4e2d\u8fd4\u56de\u8ba1\u7b97\u8868\u8fbe\u5f0f\u7684\u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ef\u4ee5\u8ba1\u7b97\u52a0\u3001\u51cf\u3001\u4e58\u3001\u9664\uff0c\u4f46\u662f\u4e0d\u80fd\u7b97\u5e42\uff0c\u4f9b\u60a8\u53c2\u8003\uff0c\u5e0c\u671b\u5bf9\u60a8\u5b66 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7038],"tags":[],"class_list":["post-319466","post","type-post","status-publish","format-standard","hentry","category-database"],"_links":{"self":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/319466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/comments?post=319466"}],"version-history":[{"count":0,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/319466\/revisions"}],"wp:attachment":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/media?parent=319466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/categories?post=319466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/tags?post=319466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}