使用用于类型安全铸造的案例构造很容易在scala中完成.以下代码确保square仅在具有相应类型的对象上调用.
class O
class A extends O {
def square(i: Int):Int = { i*i }
}
class B extends O {
def square(d: Double):Double = { d*d }
}
class C extends O {}
def square(o: O) = o match {
case a:A => print(a.square(3))
case b:B => print(b.square(3.0))
case c:C => print(9)
case _ => print("9")
}
Run Code Online (Sandbox Code Playgroud)
另一方面,存在这样的情况:使用用于铸造的类型信息并不那么容易,并且仅检查a的可用性{def square(Int): Int}就足够了.scala中是否有一个允许执行类似操作的构造
def square(o: O) = o match {
case a:{def square(Int):Int} => print(a.square(3))
case b:{def square(Double):Double} …Run Code Online (Sandbox Code Playgroud) 使用makefile时,我想要以下内容:
make clean
make Clean
make CLean
make CLEan
make CLEAn
make ...
Run Code Online (Sandbox Code Playgroud)
并且在我的makefile中都要做同样的事情.
(即我不希望制作目标区分大小写)
当然,我可以像这样写每一个:
.PHONY clean Clean CLean CLEan CLEAn ...
clean Clean CLean CLEan CLEAn ...:
$(DELETE_STUFF)
Run Code Online (Sandbox Code Playgroud)
但是我认为你可以看出为什么这不是我们想要的.
我知道'make'有一个内置的宏叫做:MAKECMDGOALS,它等于输入make后输入的内容.
for example, running 'make clean all backup'
$(MAKECMDGOALS) = "clean all backup"
Run Code Online (Sandbox Code Playgroud)
我尝试在makefile的顶部执行此操作:
MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
Run Code Online (Sandbox Code Playgroud)
它确实将变量更改为全部小写,但仍然只调用键入目标目标的规则.
我甚至试图像这样覆盖它:
override MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
Run Code Online (Sandbox Code Playgroud)
希望能早点完成,但没有成功.
我打算做一个像这样的目标:
$(MAKECMDGOALS):
MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
#BUT I CAN'T CALL OTHER …Run Code Online (Sandbox Code Playgroud) 我想在SQL Server 2008 R2中编写一个SQL查询,在日期为NULL时将日期转换为字符串.例如...
Date ShipmentRef RecieptNo
2009-01-01 03:12:11.596 DS298-YYY 18060
FM298-YYY 95464
2010-11-11 08:33:55.974 IL298-YYY 56703
2003-08-01 07:00:44.846 UI835-XYX 40264
US655-YXY 34643
2004-03-07 12:46:33.352 WE242-XXX 83755
Run Code Online (Sandbox Code Playgroud)
以上数据只是我当前数据的样本表.当我运行SELECT查询时,我希望它返回如下数据:
Date ShipmentRef RecieptNo
2009-01-01 03:12:11.596 DS298-YYY 18060
InsertRandomStringHere FM298-YYY 95464
2010-11-11 08:33:55.974 IL298-YYY 56703
2003-08-01 07:00:44.846 UI835-XYX 40264
InsertRandomStringHere US655-YXY 34643
2004-03-07 12:46:33.352 WE242-XXX 83755
Run Code Online (Sandbox Code Playgroud)
我不确定哪个更好,CASE或CONVERT.我非常感谢你给我的任何帮助.
我已经制作了一个简单的文本框,它会导致一个新的页面,它逐字回显输入(爆炸).现在我想将所有字母更改为小写,但第一个字母除外(如果这是以这种方式输入的话)
例如:Herman Archer LIVEs in NeW YORK - > Herman Archer住在纽约
我希望你能帮助我,提前谢谢!
好的,我有一个以下代码来标记具有二进制标志的tabl中具有最高month_cd的记录:
Select t1.month_cd, t2.max_month_cd
,CASE WHEN t2.max_month_cd != null then 0 else 1 end test_1
,CASE WHEN t2.max_month_cd = null then 0 else 1 end test_2
from source t1
Left join (
Select
MAX(month_cd) as max_month_cd
From source
) t2
on t1.month_cd = t2.max_month_cd;
Run Code Online (Sandbox Code Playgroud)
对我来说似乎很直接,但它返回的结果是:
month_cd max_month_cd test_1 test_2
201610 null 1 1
201611 201611 1 1
Run Code Online (Sandbox Code Playgroud)
对我来说没有任何意义,而且似乎太明显了,不能成为执行引擎中的错误.我错过了什么?
我想编写一个带有CASE WHEN子句的SQL语句,该子句使用LIKE运算符,但是我不确定如何正确设置该语句的格式。
SELECT
services.id,
(CASE services.description
WHEN LIKE '%-'
THEN services.amount * -1
ELSE services.amount
END) AS service_amount
FROM services
Run Code Online (Sandbox Code Playgroud) 我有一个表中的列,我想将当前值与另一个列交换为特定条目.当我没有把它留空时,我得到一个无空约束.
UPDATE bet.betEntry
SET direction=
CASE
WHEN (direction = '599065F7-96A9-4DF5-8577-2203BE9AA2E0') THEN 'ABD92DB9-58D8-4C60-8A34-4C00EBBAB4A5'
WHEN (direction = 'ABD92DB9-58D8-4C60-8A34-4C00EBBAB4A5') THEN '599065F7-96A9-4DF5-8577-2203BE9AA2E0'
END
FROM bet.betEntry be JOIN bet.fixture f ON be.fixtureId = f.fixtureId
WHERE f.fixtureDate > '2019-01-12 13:29:00.000'
Run Code Online (Sandbox Code Playgroud) 我正在将我的应用程序切换到Postgresql,我的架构中的所有表都是小写的,当我使用 NHibernate 进行查询时,它会向映射中的表名添加双引号,该表名在 PascalCase 中并导致查询失败我认为该表不存在。
我可以轻松转到所有映射类并将 Table 方法更改为小写,例如从 'Table("UserAccount")' 更改为 'Table("useraccount")',但我宁愿不必这样做。 .
我想知道是否有任何方法可以告诉 nhibernate 不要在查询中对表进行双引号,以便它可以正确找到它。
我试过这个:
PostgreSQLConfiguration.Standard.Raw("hbm2ddl.keywords","none").ConnectionString(x => x.Is(_connectionString));
Run Code Online (Sandbox Code Playgroud)
它没有用。我几乎会告诉 nhibernate 不要担心大小写,但是在使用 postgres 时遇到麻烦。
我尝试编写一个函数,column3 根据表中的值在表中插入一些值,但我不太熟悉在 Postgresql 9.6 中编写函数。
--Create some table
CREATE TABLE test(column1 INT, column2 INT, column3 TEXT)
INSERT INTO test VALUES(-8020,15),(-200,1),(23,115)
--Build function
CREATE OR REPLACE FUNCTION new_function()
RETURNS TEXT AS
$$
BEGIN
IF test(column1) <= -7000 THEN INSERT INTO test(column3) VALUES('small');
ELSIF test(column1) >= -7000 AND test(column2) <= 15 THEN INSERT INTO test(column3) VALUES('nohello');
ELSIF test(column1) >= -7000 ANDtable(column2) >= 15 THEN INSERT INTO test(column3) VALUES('test');
ELSE INSERT INTO test(column6) VALUES("nodata");
END IF;
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
结果应该是一个如下所示的表:
Column1 …Run Code Online (Sandbox Code Playgroud) 我的查询结果正在 aws Quicksight 中使用。尽管quicksight提供了percentileCont()来为我们完成这项工作,但我想在查询中使用它而不是使用计算字段。
最终我想做的是创建一个点列,其中
under 25percentile -> 0
under 50 percentile -> 1
under 75 percentile -> 2
rest -> 3
Run Code Online (Sandbox Code Playgroud)
取决于范围为 [a, b] 的列。
现在我找出每个百分位数的值并手动创建一个范围
With table as (
SELECT *
, cast(date_diff('day', last_transaction, current_date) as double) as col
)
SELECT *
, case
when col between 0 and 25 then 0
when col between 26 and 66 then 1
when col between 67 and 193 then 2
when col >= 194 then 3
end as point
FROM …Run Code Online (Sandbox Code Playgroud) case ×10
sql ×4
postgresql ×3
casting ×1
date ×1
exception ×1
hadoop ×1
hive ×1
hiveql ×1
makefile ×1
nhibernate ×1
php ×1
presto ×1
quote ×1
respond-to ×1
scala ×1
select ×1
sql-function ×1
sql-server ×1
sql-update ×1
string ×1
typechecking ×1